實驗環境
一臺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