1. 程式人生 > 實用技巧 >006Docker學習__ Dockerfile 常用指令

006Docker學習__ Dockerfile 常用指令

常用指令

下面列出了 Dockerfile 中最常用的指令,完整列表和說明可參看官方文件。 FROM:指定 base 映象。 MAINTAINER:設定映象的作者,可以是任意字串。 COPY:將檔案從 build context 複製到映象。 COPY 支援兩種形式: COPY src dest COPY ["src", "dest"] 注意:src 只能指定 build context 中的檔案或目錄。 ADD:與 COPY 類似,從 build context 複製檔案到映象。不同的是,如果 src 是歸檔檔案(tar, zip, tgz, xz 等),檔案會被自動解壓到 dest。
ENV:設定環境變數,環境變數可被後面的指令使用。例如:
...
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
...
EXPOSE:指定容器中的程序會監聽某個埠,Docker 可以將該埠暴露出來。我們會在容器網路部分詳細討論。 VOLUME:將檔案或目錄宣告為 volume。我們會在容器儲存部分詳細討論。 WORKDIR:為後面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令設定映象中的當前工作目錄。 RUN:執行命令並建立新的映象層,RUN 經常用於安裝軟體包。 CMD:容器啟動時執行指定的命令。
Dockerfile 中可以有多個 CMD 指令,但只有最後一個生效。設定容器啟動後預設執行的命令及其引數,但 CMD 能夠被docker run後面跟的命令列引數替換。 ENTRYPOINT:設定容器啟動時執行的命令。 Dockerfile 中可以有多個 ENTRYPOINT 指令,但只有最後一個生效。CMD 或 docker run 之後的引數會被當做引數傳遞給 ENTRYPOINT。 Dockerfile例項分析 編寫dockerfile其內容如下所示
#my Dockerfile

FROM busybox:latest
MAINTAINER 564010792@qq.com
WORKDIP 
/testdir RUN touch tmpfile1 COPY [ "tmpfile2","." ] ADD [ "test.tar.gz","." ] ENV WELCOME "you are in my container,welcome!"
構建映象 依次執行 Dockerfile 指令,完成構建。

[root@docker test]# ls
Dockerfile  test.tar.gz  tmpfile2       ####構建前確保 build context 中存在需要的檔案。
[root@docker test]# docker build -t my_images:latest .      #####依次執行 Dockerfile 指令,完成構建。
Sending build context to Docker daemon  3.584kB
Step 1/7 : FROM busybox:latest
 ---> 6d5fcfe5ff17
Step 2/7 : MAINTAINER 5640107@qq.com
 ---> Using cache
 ---> a381366b57a6
Step 3/7 : WORKDIR /testdir
---> Using cache
---> 9724c982053a
Step 4/7 : RUN touch tmpfile1
---> Using cache
---> 6355f5f617ef
Step 5/7 : COPY [ "tmpfile2","." ]
---> Using cache
---> 19db53e1e328
Step 6/7 : ADD [ "test.tar.gz","." ]
---> 26288a704213
Step 7/7 : ENV WELCOME "you are in my container,welcome!"
---> Running in 743b1d9e5303
Removing intermediate container 743b1d9e5303
---> b772c7836ae2
Successfully built b772c7836ae2
Successfully tagged my_images:latest
執行容器,驗證映象內容:
[root@docker test]# docker run --name con01 --rm -it my_images
/testdir #                 
##進入容器,當前目錄即為 WORKDIR。如果 WORKDIR 不存在,Docker 會自動為我們建立

/testdir # ls
tmpfile1  tmpfile2  tmpfile3  tmpfile4  tmpfile5
##WORKDIR 中儲存了我們希望的檔案和目錄:
##目錄 bunch:由 ADD 指令從 build context 複製的歸檔檔案 test.tar.gz,已經自動解壓。
##檔案 tmpfile1:由 RUN 指令建立。
##檔案 tmpfile2:由 COPY 指令從 build context 複製。

/testdir # echo "$WELCOME"
you are in my container,welcome!
##ENV 指令定義的環境變數已經生效。