一:DockerFile一種被Docker程序解釋的腳本,DockerFile是由一條條的命令組成的,每條命令對應linux下面的一條命令,Docker程序將這些DockerFile指令再翻譯成真正的linux命令,其有自己的書寫方式和支持的命令,Docker程序讀取DockerFile並根據指令生成Docker鏡像,相比手動製作鏡像的方式,DockerFile更能直觀的展示鏡像是怎麼產生的,有了DockerFile,當後期有額外的需求時,只要在之前的DockerFile添加或者修改響應的命令即可重新生成新的Docke鏡像,避免了重複手動製作鏡像的麻煩,具體如下:
1.1:準備環境:
<code>[root@docker-server1 opt]# mkdir /opt/dockerfile/nginx -p
[root@docker-server1 opt]# cd /opt/dockerfile/nginx/ #針對要構建的鏡像分別創建一個保存DOckerfile的目錄/<code>
1.2:編寫Dockerfile:
<code>[root@docker-server1 nginx]# vim /opt/dockerfile/nginx/Dockerfile #生成的鏡像的時候會在當前目錄查找Dockerfile文件,so名稱不可寫錯,且D必須大寫
#My Dockerfile
#"#"為註釋,類似於shell
#除了註釋之外的第一行,必須是From xxx (xxx是基礎鏡像)
From centos #第一行先定義基礎鏡像,後面的本地有效的鏡像名,如果被動沒有會從遠程倉庫下載,很重要
#維護者的信息
MAINTAINER kf [email protected]
###########################其他可選參數##################################################
#USER #指定該容器運行時的用戶名和UID,後續的RUN命令也會使用這面指定的用戶執行
#WORKDIR /a
#WORKDIR b #指定工作目錄,最終為/a/b
#VOLUME 設置主機掛載卷
#########################################################################################
#執行的命令,將編譯安裝nginx的步驟執行一遍
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.8.1.tar.gz /tmp/
RUN cd /tmp/nginx-1.8.1 && ./configure --prefix=/usr/local/nginx && make && make install
RUN cd /usr/local/nginx/
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
RUN useradd nginx -s /sbin/nologin
RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN echo "test nginx page" > /usr/local/nginx/html/index.html
EXPOSE 80 443 #向外開放的端口,多個端口用空格做間隔,啟動容器時候-p需要使用此端向外映射,如: -p 8081:80,則80就是這裡的80
CMD ["nginx"] #運行的命令,每個Dockerfile只能有一條,如果有多小則只有最後一條被執行
#如果在從該鏡像啟動容器的時候也指定了命令,那麼指定的命令會覆蓋Dockerfile構建的鏡像裡面的CMD命令,即指定的命令優先級更高,Dockerfile的優先級較低一些/<code>
1.3:構建過程:
<code>[root@docker-server1 nginx]# cp /usr/local/nginx/conf/nginx.conf .
[root@docker-server1 nginx]# cp /usr/local/src/nginx-1.8.1.tar.gz . #當前目錄需要存在構建docker鏡像中使用的所有文件
[root@docker-server1 nginx]# docker build -t jack/mynginx:v4 /opt/dockerfile/nginx/
#jack/mynginx:v4/<code>
1.4:構建結束:
1.5:將通過Dockerfile構建的鏡像啟動一個容器:
<code>[root@docker-server1 nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jack/mynginx v4 92b0d6fb92ab 10 seconds ago 534.5 MB
jack/nginx-test-image latest 9a05d0ab900e About an hour ago 518.3 MB
jack/nginx-test-image V1 26169a42251e About an hour ago 518.3 MB
docker.io/nginx latest cc1b61406712 12 days ago 181.8 MB
centos latest 778a53015523 10 months ago 196.7 MB
[root@docker-server1 nginx]# docker run --name myimage-nginx1 -d -p 8081:80 jack/mynginx:v4
bf026f7e96b0a8f15377e75309b3338c36b505368ba13e1904fcf6bf0f2a4b16/<code>
1.6:訪問宿主機的8081端口驗證web界面:
1.7:yum版本的構建DockerFile:
<code>from centos
MAINTAINER kf [email protected]
run rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
run yum install nginx -y
run echo "daemon off;" >> /etc/nginx/nginx.conf
run echo "test nginx page" > /usr/share/nginx/html/index.html
expose 80
expose 443
cmd ["nginx","ls"]/<code>
1.8:從yum構建的鏡像啟動一個容器:
<code>[root@docker-server1 yum-nginx]# docker run --name yum-nginx -d -p 8082:80 jack/mynginx:v5 nginx
0408e6f892a9c71e28d55162cc2efc7a2f69d72da8f1ae5dc2da5322efa38a31/<code>
1.9:訪問通過yum安裝nginx構建的docker鏡像啟動的實例:
閱讀更多 愛踢人生 的文章