1. 程式人生 > >構建Docker鏡像:nginx

構建Docker鏡像:nginx

local pen load man F12 type docke nds fig

Dockerfile介紹

Dockerfile是由一組指令組成的文件,每條指令對應linux中一條命令,Docker程序將讀取Dockerfile中的指令生成指定鏡像。
Dockerfile大致結構:基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動時執行指令。每行支持一條指令,每條指令可以攜帶多個參數,支持以 # 開頭的註釋。
Dockerfile操作指令:

FROM 鏡像 : 指定新的鏡像所基於的鏡像
MAINTAINER 名字 :說明新鏡像的維護人
RUN 命令 : 在所基於的鏡像上執行命令,並提交到新的鏡像中
CMD ["要運行的程序","參數1","參數2"] : 指定啟動容器時要運行的命令或腳本

EXPOSE端口號 : 指定新鏡像加載到Docker時要開啟的端口
ENV環境變量 變量值 : 設置一個環境變量的值,會背後面的RUN用到
ADD源文件/目錄 目標文件/目錄 :將源文件復制到目標文件 ,源文件和Dockerfile位於同一目錄
COPY源文件/目錄 目標文件/目錄 :將本地主機的源文件復制到目標目錄,源文件和Dockerfile位於同一目錄
VOLUME["目錄"] : 在容器中創建一個掛載點
USER 用戶名 /UID :指定運行容器時的用戶
WORKDIR路徑 : 為後續的RUN 、CMD、ENTRYPOINT 指定工作目錄
ONBUILD命令 : 指定所生成的鏡像作為一個基礎鏡像時所要運行的命令。

構建Nginx鏡像
1.創建工作目錄

[root@test3 ~]# docker pull centos    //下載基礎鏡像
[root@test3 ~]# mkdir nginx
[root@test3 ~]# cd nginx/

創建Dockerfile文件

[root@test3 ningx]#  vim Dockerfile
# 設置基礎鏡像
FROM centos
# 維護該鏡像的用戶
MAINTAINER this is nginx image <sz>
# 安裝環境 下載軟件包 並解壓
RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
RUN wget https://nginx.org/download/nginx-1.14.0.tar.gz
RUN tar xvf nginx-1.14.0.tar.gz
# 工作目錄 編譯安裝
WORKDIR nginx-1.14.0
RUN ./configure --prefix=/usr/local/nginx && make && make install
# 開啟 80 和443端口
EXPOSE 80
EXPOSE 443
# 修改配置文件,以非 deamon方式啟動
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
# 復制服務腳本並設置權限
WORKDIR /root/nginx
ADD run.sh /run.sh
RUN chmod 755 /run.sh
# 啟動容器時執行腳本
CMD ["/run.sh"]

執行腳本

[root@test3 ningx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

生成鏡像

[root@test3 ningx]# docker build -t nginx:new .
······
Step 13/14 : RUN chmod 755 /run.sh
 ---> Running in ad6e4604aede

 ---> 979f95edc03b
Removing intermediate container ad6e4604aede
Step 14/14 : CMD /run.sh
 ---> Running in 8f1209324969
 ---> a0bdb7bb13ad
Removing intermediate container 8f1209324969
[root@test3 ningx]# docker run -d -P nginx:new
f2855c4f4732435cfa3a8c9e17af8540c874577228f8276013260b2d9474e50b
[root@test3 ningx]#  docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
f2855c4f4732        nginx:new           "/run.sh"           6 seconds ago       Up 4 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   clever_gates

測試
技術分享圖片
註:把鏡像保存到本地

[root@test3 ~]# docker save -o centos_nginx.tar  nginx:new

centos_nginx.tar 為保存到本地後的包名
nginx:new 為被打包的對象鏡像

如果在一臺新機器還原docker鏡像

[root@test2 ~]# docker load --input centos_nginx.tar
······
Loaded image: nginx:new

構建Docker鏡像:nginx