nginx容器,tomcat容器,mariadb容器構建(離線版),以及./configure: error: C compiler cc is not found報錯解決

實驗環境

一臺centos7 IP 192.168.100.102 宿主機

安裝好docker服務,並載入centos7.4基礎鏡像

然後是安裝Nginx時候,./configure: error: C compiler cc is not found,這個報錯,是缺少gcc編譯器,是兼容性的問題,
需要centos7.4或者更低版本centos7的基礎鏡像,

因爲本例nginx服務的基礎包,需要兼容性,如果使用較高的centos7,就會報錯,nginx包的包名如下

nginx-1.12.0.tar.gz這個版本的nginx需要 centos7.4或者更低版本的centos7的基礎鏡像

[root@CentOS7-02 ~]# docker images
在這裏插入圖片描述

構建nginx容器

1)宿主機發布軟件源

因爲鏡像創建的時候需要使用yum安裝軟件包,所以

宿主機使用http方式,發佈軟件源,軟件源爲centos7光盤

宿主機安裝並開啓http服務
掛載光盤,配置本地yum源
[root@CentOS7-02 ~]# yum -y install httpd && systemctl start httpd

創建共享目錄
[root@CentOS7-02 ~]# cd /var/www/html/
[root@CentOS7-02 html]# mkdir centos7
[root@CentOS7-02 html]# mount /dev/cdrom centos7/
[root@CentOS7-02 html]# ls centos7/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL

2)創建並編寫Dockerfile文件

[root@CentOS7-02 html]# cd /root/
[root@CentOS7-02 ~]# mkdir nginx
[root@CentOS7-02 ~]# cd nginx/
[root@CentOS7-02 nginx]# vim Dockerfile
(按照我,下面兩張圖片打,如果你不想手打,後面有打好的,可以直接複製)
在這裏插入圖片描述

在這裏插入圖片描述

(下面這是打好的,可以直接複製)

#基礎鏡像
FROM dadoha/centos7.4.1708

#新鏡像作者信息,隨意寫
MAINTAINER ajbn

#yum安裝必要基礎包
RUN rm -rf /etc/yum.repos.d/*
ADD centOS7.repo /etc/yum.repos.d/
RUN yum -y install proc-devel net-tools gcc zlib zlib-devel make openssl-devel

#傳入nginx包,
COPY nginx-1.12.0.tar.gz /
RUN tar zxf /nginx-1.12.0.tar.gz

#編譯安裝nginx, # WORKDIR類似切換目錄的意思,
WORKDIR /nginx-1.12.0
RUN ./configure --prefix=/usr/local/nginx && make && make install

#開啓端口 443是https端口
EXPOSE 80
EXPOSE 443

#修改Nginx配置文件,以非daemon方式啓動
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#複製啓動腳本WORKDIR /
ADD run.sh /
RUN chmod 755 /run.sh

#運行啓動腳本
CMD ["/run.sh"]

3)其他配置

[root@CentOS7-02 nginx]# cp /etc/yum.repos.d/centOS7.repo /root/nginx/
(把本地的.repo改一下名稱,爲我這樣,再複製)

[root@CentOS7-02 nginx]# vim centOS7.repo (改成如下)
[local]
name=centos7
baseurl=http://192.168.100.102/centos7
enabled=1
gpgcheck=0

把nginx軟件包拖入,
[root@CentOS7-02 nginx]# pwd
/root/nginx
[root@CentOS7-02 nginx]# ls | grep nginx
nginx-1.12.0.tar.gz

4)編寫執行腳本內容

[root@CentOS7-02 nginx]# pwd
[root@CentOS7-02 nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

5)生成鏡像

[root@CentOS7-02 nginx]# docker build -t nginx:ajbn .
[root@CentOS7-02 nginx]# docker images | grep nginx
nginx ajbn 423f1bc9a75f 17 minutes ago 309MB

6)啓動容器進行測試

[root@CentOS7-02 nginx]# docker run -d --name nginx -P nginx:ajbn
(-P(大寫) 會自動映射容器中所有的端口,而-p需要一個一個的指定映射端口)

[root@CentOS7-02 nginx]# docker ps -a | grep nginx
(你們的自動映射的端口號,可能和我這裏不一樣,注意看 80前面的那個端口,一會去訪問這個端口測試)
在這裏插入圖片描述

7)訪問測試

瀏覽器訪問測試

構建Tomcat容器

1)建立工作目錄,並拖入相關軟件

[root@CentOS7-02 ~]# cd /root/
[root@CentOS7-02 ~]# mkdir tomcat
[root@CentOS7-02 ~]# cd tomcat/

1.託入JDK,到宿主機
[root@CentOS7-02 tomcat]# ls
jdk-8u91-linux-x64.tar.gz
[root@CentOS7-02 tomcat]# tar zxf jdk-8u91-linux-x64.tar.gz
[root@CentOS7-02 tomcat]# ls
jdk1.8.0_91 jdk-8u91-linux-x64.tar.gz

2.託入tomcat軟件包(還是上面的目錄)
[root@CentOS7-02 tomcat]# ls | grep apache
apache-tomcat-8.5.16.tar.gz

2)編寫Dockerfile

[root@CentOS7-02 tomcat]# vim Dockerfile
(按照下圖打,後面也有打好的,可以直接複製)

在這裏插入圖片描述

(下面這些是打好的,可以直接複製)

FROM dadoha/centos7.4.1708
MAINTAINER ajbn

#設置JDK設置變量
ADD jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin/:/usr/local/java/jre/bin
#注意變量名和值要在一行(可以自動換行),我這裏顯示成了兩行,直接複製就行
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar

#移動tomcat軟件包,
COPY apache-tomcat-8.5.16.tar.gz /
RUN tar zxf /apache-tomcat-8.5.16.tar.gz

#鏡像中移動位置,重命名爲 tomcat
RUN mv /apache-tomcat-8.5.16 /usr/local/tomcat

#開啓80端口
EXPOSE 80

#啓動容器是添加並執行腳本
ADD run.sh /
RUN chmod 755 /run.sh
CMD ["/run.sh"]

3)創建啓動腳本

[root@CentOS7-02 tomcat]# vim run.sh
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /run

[root@CentOS7-02 tomcat]# ls
在這裏插入圖片描述

4)生成鏡像

[root@CentOS7-02 tomcat]# docker build -t tomcat:ajbn .
[root@CentOS7-02 tomcat]# docker images | grep tomcat
tomcat ajbn 26ed44176747 42 minutes ago 598MB

5)創建容器並訪問測試

[root@CentOS7-02 tomcat]# docker run -d --name tomcat -p 8888:8080 tomcat:ajbn
(把宿主機本地8888端口,轉換到容器的 8080端口)
[root@CentOS7-02 tomcat]# docker ps | grep tomcat
在這裏插入圖片描述

瀏覽器訪問 http://192.168.100.102:8888/

成功如下
在這裏插入圖片描述

構建mariadb容器

1)建立工作目錄

[root@CentOS7-02 ~]# cd /root/
[root@CentOS7-02 ~]# mkdir mariadb

.repo文件,直接使用剛剛Nginx工作目錄的

[root@CentOS7-02 mariadb]# cp /root/nginx/centOS7.repo /root/mariadb/
[root@CentOS7-02 mariadb]# ls
centOS7.repo

2)創建Dockerfile文件

[root@CentOS7-02 mariadb]# vim Dockerfile
(後面也有打好的,可以直接複製)
在這裏插入圖片描述

FROM dadoha/centos7.4.1708
MAINTAINER ajbn
RUN rm -rf /etc/yum.repos.d/*
ADD centOS7.repo /etc/yum.repos.d/

#安裝mariadb數據庫
RUN yum -y install mariadb-server mariadb net-tools

#設置環境變量,便於管理
ENV MARIADB_USER root
ENV MARIADB_PASS 123456
#讓容器支持中文
ENV LC_ALL en_US.UTF-8

#初始化數據庫
ADD db_init.sh /
RUN chmod 775 /db_init.sh
RUN /db_init.sh

#導出端口
EXPOSE 3306

#添加啓動文件
ADD run.sh /
RUN chmod 775 /run.sh

#設置默認啓動命令
CMD ["/run.sh"]

3)創建其他相關文件

1.編寫初始化配置文件
[root@CentOS7-02 mariadb]# vim db_init.sh
(我後面也有打好的,可以直接複製)
在這裏插入圖片描述

(下面這些是打好的)

#!/bin/bash

#初始化mariadb
mysql_install_db --user=mysql

#sleep3的意思是,停止3秒,再運行下面的
sleep 3

#啓動mariadb服務
mysqld_safe &

sleep 3
#設置root用戶密碼,這裏變量是剛剛Dockerfile中的
mysql -e "use mysql; grant all privileges on *.* to '$MARIADB_USER'@'%' identified by '$MARIADB_PASS' with grant option;"

h=$(hostname)

mysql -e "use mysql; update user set password=password('$MARIADB_PASS') where user='$MARIADB_USER' and host='$h';"

#刷新策略,生效
mysql -e "flush privileges;"

2.編寫啓動文件
[root@CentOS7-02 mariadb]# vim run.sh
#!/bin/bash
mysqld_safe

應該有如下4個文件
[root@CentOS7-02 mariadb]# ls
centOS7.repo db_init.sh Dockerfile run.sh

4)生成鏡像

[root@CentOS7-02 mariadb]# docker build -t mariadb:ajbn .

[root@CentOS7-02 mariadb]# docker images | grep mariadb
mariadb ajbn 404d47ef5f2e 24 minutes ago 421MB

5)創建容器並進入容器中的數據庫

[root@CentOS7-02 mariadb]# docker run -d --name mariadb -p 33:3306 mariadb:ajbn
(本地33端口映射到容器3306端口)

[root@CentOS7-02 mariadb]# docker ps | grep mariadb
在這裏插入圖片描述

連接容器中的數據庫

首先宿主機,要安裝mariadb,要不然沒有連接數據庫命令
先把光盤掛載到本地,修改yum源

[root@CentOS7-02 mariadb]# mount /dev/cdrom /mnt/
[root@CentOS7-02 mariadb]# vim /etc/yum.repos.d/centOS7.repo (改成如下)
[local]
name=centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@CentOS7-02 mariadb]# yum -y install mariadb

宿主機連接容器中的數據庫
[root@CentOS7-02 mariadb]# mysql -uroot -h 192.168.100.102 -P 33 -p123456

(-P 是自己指定端口,33是宿主機映射到容器中的mariadb 3306 端口,-p是密碼 ,密碼是剛剛Dockerfile中的USER_PASS變量的值)

(顯示,如下就是成功了,)
MariaDB [(none)]>
MariaDB [(none)]> exit
Bye

實驗完畢 !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章