DockerFile製作Docker鏡像

一: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:構建結束:

DockerFile製作Docker鏡像

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界面:

DockerFile製作Docker鏡像

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鏡像啟動的實例:


DockerFile製作Docker鏡像


分享到:


相關文章: