Docker之二----Dockerfile制作Ningx鏡像


Docker鏡像制作

1、Docker鏡像有沒有內核?

從鏡像大小上面來說,一個比較小的鏡像只有十幾MB,而內核文件需要一百多兆,因此鏡像里面是沒有內核的,鏡像在被啟動為容器后將直接使用宿主機的內核,而鏡像本身則只提供相應的rootfs,即系統正常運行所必須的用戶空間的文件系統,比如 /dev,/,/proc,/bin /etc等目錄,所以容器當中基本是沒有/boot目錄的,而/boot當中保存的就是與內核相關的文件和目錄 。

2、為什么沒有內核?

由於容器啟動和運行過程中是直接使用宿主機的內核,所以沒有直接調用過物理硬件所以也不會涉及到硬件驅動, 因此也用不上內核和驅動,另外有內核的那是虛擬機。

1、DockerFile制作yum版nginx鏡像

DockerFile可以說是 一種可以被 Docker程序解釋的腳本, DockerFile是由一條條的命令組成的,每條命令對應linux下面的一條命令, Docker 程序將這些DockerFile指令再翻譯成真正的指令再翻譯成真正的linuxlinux命令,Docker 程序讀取DockerFile並根據指令生成 Docker 鏡像,相比手動制作鏡像的方式, DockerFile更能直觀的展示鏡像是怎么產生的,有了DockerFile,當后期有額外的需求時,只要在之前的 DockerFile添加或者修改響應的命令即可。重新生成新的 Docker鏡像,避免了重復手動制作鏡像的麻煩,具體如下:

實戰一:Dockerfile制作nginx鏡像

1、Dockerfile制作yum版nginx鏡像

1、先經過docker下載centos鏡像

[root@centos-7 ~]# yum install docker-ce  -y #安裝官網docker-ce,默認安裝最新版
[root@centos-7 ~]# systemctl start docker  #啟動docker
[root@centos-7 ~]# docker pull centos  #下載centos鏡像

2、切換到一個新建的nginx目錄下,進行實驗測試

[root@centos-7 ~]# mkdir /data/nginx
[root@centos-7 ~]# cd /data/nginx

3、創建一個nginx測試頁,然后訪問網頁測試  

[root@centos-7 nginx]# cd  /data/nginx
[root@centos-7 nginx]# cat index.html  #修改一個測試頁面
nginx web test
[root@centos-7 nginx]# cat index1.html  #修改一個測試頁面
nginx web index1 test
[root@centos-7 nginx]# tar zcvf  code.tar.gz index1.html index.html 

4、開始在nginx目錄下創建一個Dockerfile文件,創建的nginx鏡像,不能在鏡像內改配置文件,只能將配置文件傳出來,在宿主機內修改,然后再傳到配置文件中,測試的代碼也是如此。

FROM centos

MAINTAINER liu 958421213@@qq.com

RUN yum install epel-release  -y &&  yum install nginx -y   && rm -rf /usr/share/nginx/html/index.html  #如果加入后面的rm -rf 命令后,就會重新執行前面的安裝
 
ENV MY_HOST 192.168.7.101

ADD code.tar.gz /usr/share/nginx/html/   # 直接導入壓縮的包,ADD選項是解壓包,用COPY就是不解壓

EXPOSE 80 443

CMD ["nginx"]

5、制作鏡像腳本

[root@centos-7 nginx]# cat build-command.sh 
#!/bin/bash

TAG=$1
docker build  -t nginx:$1 .

 6、執行制作鏡像腳本

[root@centos-7 nginx]# bash build-command.sh make 

7、運行docker容器並啟動nginx

[root@centos-7 nginx]# docker images  # 查看docker鏡像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               make                eca08b87df7f        5 minutes ago       511MB
nginx               2020                ed020900aa3c        20 minutes ago      317MB
centos              latest              0f3e07c0138f        3 months ago        220MB
[root@centos-7 nginx]# docker run -it --rm -p 80:80 nginx:make bash  # 啟動nginx:make鏡像,--rm測試完就會刪除此鏡像
[root@da4569e4a5e3 /]# nginx #啟動nginx
Cannot parse dst/src address.
[root@da4569e4a5e3 /]# ss -anlt
State             Recv-Q             Send-Q                           Local Address:Port                           Peer Address:Port             
LISTEN            0                  128                                    0.0.0.0:80                                  0.0.0.0:*                
LISTEN            0                  128                                       [::]:80                                     [::]:* 

8、網頁測試:

 兩個不同的html訪問都已成功:

 

 

 9、如果需要修改配置文件,不能在鏡像里邊進行修改,需要將配置文件傳出來修改,然后再傳回去再次創建鏡像。

[root@aef982ee5d27 /]# sz /etc/nginx/nginx.conf

10、修改后的Dockerfile文件

FROM centos

MAINTAINER liu 958421213@@qq.com

RUN yum install epel-release  -y &&  yum install nginx -y   && rm -rf /usr/share/nginx/html/index.html  #如果加入后面的rm -rf 命令后,就會重新執行前面的安裝
 
ENV MY_HOST 192.168.7.101

ADD nginx.conf  /etc/nginx/  # 修改后的配置文件加上此選項即可
ADD code.tar.gz /usr/share/nginx/html/   # 直接導入壓縮的包,ADD選項是解壓包,用COPY就是不解壓

EXPOSE 80 443

CMD ["nginx"]

2、Dockerfile編譯nginx鏡像

nginx源碼包下載官網:https://nginx.org/en/download.html

 

1、創建一個nginx測試頁,然后訪問網頁測試  

[root@centos-7 nginx]# cd  /data/nginx
[root@centos-7 nginx]# cat index.html  #修改一個測試頁面
nginx web test
[root@centos-7 nginx]# cat index1.html  #修改一個測試頁面
nginx web index1 test
[root@centos-7 nginx]# tar zcvf  code.tar.gz index1.html index.html 

2、在上面的基礎修改Dockerfile配置文件

[root@centos-7 nginx]# cat Dockerfile
FROM centos

MAINTAINER  liu 29737xxxx0@qq.com

RUN yum install epel-release -y && yum install  vim iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel zip unzip zlib-
devel  net-tools lrzsz tree  telnet lsof tcpdump wget libevent libevent-devel bc  systemd-devel bash-completion traceroute -y  
 
RUN  yum groupinstall "development tools" -y  #添加一個開發包組,為了編譯安裝
ADD nginx-1.14.2.tar.gz /usr/local/src
RUN cd /usr/local/src/nginx-1.14.2 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx
#COPY nginx.conf /apps/nginx/conf
#ENV MY_HOST 192.168.7.101
#ADD nginx.conf /etc/nginx/
ADD code.tar.gz  /apps/nginx/html/

EXPOSE 80 443
CMD ["nginx"]

3、制作鏡像腳本

[root@centos-7 nginx]# cat build-command.sh 
#!/bin/bash

TAG=$1
docker build  -t nginx:$1 .

 4、執行制作鏡像腳本

[root@centos-7 nginx]# bash build-command.sh make 

5、執行創建鏡像腳本

[root@centos-7 nginx]# bash build-command.sh  make

6、運行鏡像,並啟動nginx服務

[root@centos-7 nginx]# docker run -it --rm -p 80:80 nginx:make bash
[root@ae4b6e0b4d0b /]# ss -ltnp
State            Recv-Q             Send-Q                            Local Address:Port                           Peer Address:Port             
[root@ae4b6e0b4d0b /]# nginx
[root@ae4b6e0b4d0b /]# ll
bash: ll: command not found
[root@ae4b6e0b4d0b /]# ss -nltp
State             Recv-Q             Send-Q                           Local Address:Port                           Peer Address:Port             
LISTEN            0                  128                                    0.0.0.0:80                                  0.0.0.0:*                 users:(("nginx",pid=18,fd=6))
[root@ae4b6e0b4d0b /]# exit

7、網頁測試:

 兩個不同的html訪問都已成功:

 

 

3、docker下載Mysql鏡像  

1、直接pull下載mysql鏡像

[root@centos7 ]# docker pull mysql:5.6.44

2、運行此鏡像,需要指定密碼,加上-e選項才能初始化成功mysql數據庫

[root@centos-7 nginx]# docker run -it --rm -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.44  # 做一個端口映射

3、在另一台mysql客戶端進行測試連接

[root@centos-7 ~]# mysql -p123456 -h192.168.7.100
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

注意:將數據庫的數據最好能存在宿主機的/var/lib/mysql目錄下,避免容器刪除后,數據庫還能在下一個容器上繼續運行。

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM