使用dockerfile構建nginx映象
使用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 install gcc make pcre-devel zlib-devel tar zlib ADD 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 && make install
&& 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Dockerfile構建映象]Docker
- DockerFile構建映象Docker
- 筆記:使用Dockerfile構建映象筆記Docker
- 使用 Dockerfile 自定義 Nginx 映象DockerNginx
- 用dockerfile構建docker映象Docker
- Docker 映象構建之 DockerfileDocker
- Docker容器學習梳理 - Dockerfile構建映象Docker
- dockerfile構建nginx並結合phpDockerNginxPHP
- Prometheus之Dockerfile編寫、映象構建、容器啟動PrometheusDocker
- 使用Dockerfile構建django專案DockerDjango
- 再見 Dockerfile,擁抱新型映象構建技術 BuildpacksDockerUI
- Docker映象的構成__DockerfileDocker
- 使用Packer構建映象
- 使用 Dockerfile 定製映象Docker
- 使用Dockerfile定製映象Docker
- Docker學習筆記(三):Dockerfile及多步驟構建映象Docker筆記
- Dockerfile構建MySQLDockerMySql
- 使用 Dockerfile 定製映象【轉】Docker
- Docker從零構建php-nginx-alpine映象DockerPHPNginx
- Dockerfile入門(使用Dockerfile生成jdk1.8映象)DockerJDK
- 使用Dockerfile構建一個django專案DockerDjango
- 最簡單的dockerfile使用教程 - 建立一個支援SSL的Nginx映象DockerNginx
- 013、Dockerfile構建映象(2019-01-02 週三)Docker
- Dockerfile建立映象Docker
- dockerfile構建flask環境DockerFlask
- 使用maven外掛構建docker映象MavenDocker
- Docker如何製作映象-Dockerfile的使用Docker
- docker構建映象Docker
- Dockerfile定製映象Docker
- Docker框架使用系列教程(七)Dockerfile映象建立Docker框架
- Docker 構建 Java Web 開發環境——使用Dockerfile(二)DockerJavaWeb開發環境
- 使用 Docker 開發 - 使用多階段構建映象Docker
- 基於ubuntu映象構建redis映象UbuntuRedis
- Docker 構建 kubectl 映象Docker
- Docker映象構建(五)Docker
- Packer構建openStack映象
- StarRocks 容器映象構建
- Dockerfile 多階段構建實踐Docker