使用dockerfile構建nginx映象

highhand發表於2021-09-09

使用dockerfile構建nginx映象

 


docker構建映象的方法:   commit、dockerfile

  1、使用commit來構建映象:

    commit是基於原有映象基礎上構建的映象,使用此方法構建映象的目的:儲存映象裡的一些配置資訊和修改的資訊。相當於一個映象的快照。

  2、使用dockerfile來構建映象:

    dockerfile是快速構建所需(自定義)映象。


dockerfile的指令:

  FROM:指定基礎映象(FROM是必備的指令,並且必須為第一條指令)。

  RUN: 用來執行命令列命令。其基本格式:

      shell格式: RUN    ,輸入在bash環境中的命令即可,一個dockerfile允許使用RUN不得超過127層,所以,使用一次RUN, 使用 ‘  ’ 換行,使用‘ && ’執行下一條命令。一般使用此種格式;

      exec格式: RUN  ,此種方式像是函式呼叫中的格式;

  COPY:  複製檔案。 其基本格式:

      格式1:COPY ...

      格式2:COPY [“”,.....""]

  ADD: 更高階的複製檔案,在COPY的基礎上增加了一些功能,如果複製的是壓縮包的話,會直接解壓,而不需要在使用RUN解壓;

  CMD:容器啟動命令。其基本格式:

      shell格式: CMD

      exec格式: CMD ["可執行檔案", "引數1", "引數2"...]

      引數列表格式: CMD [“引數1”, “引數2”...],在指定了ENTRYPOINT指令後,用CMD指定具體的引數

  ENTRYPOINT: 入口點。其基本格式分為exec和shell,

      ENTRYPOINT的目的和CMD一樣,都是在指定容器啟動程式及引數。ENTRYPOINT在執行中可以替代,不過比CMD繁瑣,需要透過docker run 的引數--entrypoint 來指定。當指定了ENTRYPOINT後,CMD的含義就發生了改變,不在是直接執行其命令,而是將CMD的內容作為引數傳遞給ENTRYPOINT指令。其執行時就變成了:   ""

  ENV: 設定環境變數。(都可以使用這裡使用的變數)其基本格式:

      格式1:ENV

      格式2:ENV ==...

  ARG: 構建引數。構建引數和ENV的效果一樣,都是設定環境變數,所不同的是ARG所構建的環境變數在將來容器執行時是不存在的。其基本格式:

      格式1: ARG [=]

      格式2: 該預設值可以在構建命令 docker build  中用 --build-arg = 來覆蓋

  VOLUME: 定義匿名卷。 其基本格式:

      格式1: VOLUME ["", ""...]

      格式2: VOLUME

  EXPOSE:  暴露埠。EXPOSE指令是宣告執行時容器所提供的埠,在啟動容器時不會在因為這個宣告而開啟埠。 其基本格式:

      格式1: EXPOSE [...]

  WORKDIR: 指定工作目錄。其基本格式:

      格式1: WORKDIR

  USER: 指定當前使用者。USER是幫助你切換到指定使用者。 其基本格式:

      格式1: USER

  HEALTCHECK: 健康檢查,判斷容器的狀態是否正常。 其基本格式:

      格式1: HEALTCHECK [選項] CMD :設定檢查容器健康狀況的命令

      格式2: HEALTCHECK NONE: 如果基礎映象有健康檢查指令,使用此格式可以遮蔽掉其健康檢查指令

 


 

 構建nginx映象:

建立一個目錄,在該目錄裡編寫dockerfile:

12345 [root@docker ~]# mkdir mynginx[root@docker ~]# cd mynginx/[root@docker mynginx]# pwd/root/mynginx[root@docker mynginx]#

下載nginx原始碼包到建立的目錄下(mynginx目錄下):

1 [root@docker ~]# wget -P /root/mynginx/ 

編寫Dockerfile:

[root@docker mynginx]# vi Dockerfile

其內容如下:

FROM centos RUN ping-c 1 RUN yum -y installgccmakepcre-devel zlib-devel tarzlibADD nginx-1.15.2.tar.gz /usr/src/RUN cd/usr/src/nginx-1.15.2     && mkdir/usr/local/nginx    && ./configure--prefix=/usr/local/nginx&& make&& makeinstall    && ln-s /usr/local/nginx/sbin/nginx/usr/local/sbin/    && nginx RUN rm-rf /usr/src/nginx-1.15.2 EXPOSE 80

執行docker命令構建映象:

圖片描述

[root@docker mynginx]# docker build -t nginx:v3 .
Sending build context to Docker daemon  1.029MB
Step 1/7 : FROM centos
 ---> 5182e96772bf
Step 2/7 : RUN ping -c 1 
 ---> Using cache
 ---> 2f70f8abaf2a
Step 3/7 : RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
 ---> Using cache
 ---> dbdda4b7ae6f
Step 4/7 : ADD nginx-1.15.2.tar.gz /usr/src/
 ---> Using cache
 ---> 18ace6285668
Step 5/7 : RUN cd /usr/src/nginx-1.15.2     && mkdir /usr/local/nginx     && ./configure --prefix=/usr/local/nginx && make && make install     && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/     && nginx
 ---> Using cache
 ---> 99629488ede9
Step 6/7 : RUN rm -rf /usr/src/nginx-1.15.2
 ---> Using cache
 ---> 869fbad71879
Step 7/7 : EXPOSE 80
 ---> Using cache
 ---> 384bed72ea6f
Successfully built 384bed72ea6f
Successfully tagged nginx:v3

圖片描述

輸出兩個Successfully即為構建成功!

 


啟動自定義映象:

使用 docker images 檢視構建的映象:

圖片描述

啟動自定義的映象:

[root@docker ~]# docker run -d -p 80:80 --name nginx nginx:v3
4ac935e955b1c3ac49eed68f3372f3e96a8934fd8ccf4614afa3d7c29eb96c08
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
4ac935e955b1        nginx:v3            "/bin/bash"         3 seconds ago       Exited (0) 2 seconds ago                       nginx

注:這時,你無論怎麼啟動這個容器,它還是一直處於exited狀態。

經過各種解決,最終,終於知道問題出在了哪。 原來容器啟動時,它是在後臺對應著一個執行緒啟動的,它在啟動時是已經啟動了,但它執行完命令後,就退出了,並沒有在後臺執行著,所以使用 -dit 引數讓它在後臺執行即可。

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
ecaafe119044        nginx:v3            "/bin/bash"         3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   nginx

然而.......

此時又出現了問題,它雖然起來了,但nginx的web網頁介面訪問不了,顯示拒絕連線!!!!

[root@docker ~]# curl 192.168.100.22curl: (7) Failed connect to 192.168.100.22:80; 拒絕連線
[root@docker ~]# elinks --dump 192.168.100.22ELinks: 拒絕連線

然後,又經過問百度,FQ看谷歌,終於找到了問題的所在。原來只要使用 exec 進入到容器裡啟動nginx就可以了。

[root@docker ~]# docker exec -it nginx bash
[root@ecaafe119044 /]# nginx
[root@ecaafe119044 /]# exit
exit

圖片描述

[root@docker ~]# curl 192.168.100.22
html>

Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to .
Commercial support is available at .

Thank you for using nginx.

圖片描述

這樣! nginx映象就購將成功了!!!!

原文出處:https://www.cnblogs.com/zhhuihui/p/docker_z.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/810/viewspace-2813701/,如需轉載,請註明出處,否則將追究法律責任。

相關文章