1. 程式人生 > >Docker安裝與使用(從無到有開始三)(附Jenkins構建的Dockerfile)

Docker安裝與使用(從無到有開始三)(附Jenkins構建的Dockerfile)

這一章我們來講講映象

1.基本說明

Dockfile是一個用於編寫docker映象生成過程的檔案,其有特定的語法。

寫法解析:docker build --tag name:tag . name是映象的名稱,tag是映象的版本或者是標籤號,不寫就是lastest。注意後面有一個空格和點,.前面可以指定Dockerfile地址。預設為當前的Dockerfile

2.語法

Dockerfile的基本指令有十三個,分別是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。下面對這些指令的用法一一說明。

2.1 FROM

  用法:FROM <image>

  說明:第一個指令必須是FROM了,其指定一個構建映象的基礎源映象,如果本地沒有就會從公共庫中拉取,沒有指定映象的標籤會使用預設的latest標籤,可以出現多次,如果需要在一個Dockerfile中構建多個映象。

2.2 MAINTAINER

  用法:MAINTAINER <name> <email>

  說明:描述映象的建立者,名稱和郵箱

2.3 RUN

  用法:RUN "command" "param1" "param2"

  說明:RUN命令是一個常用的命令,執行完成之後會成為一個新的映象,這裡也是指映象的分層構建。一句RUN就是一層,也相當於一個版本。這就是之前說的快取的原理。我們知道docker是映象層是隻讀的,所以你如果第一句安裝了軟體,用完在後面一句刪除是不可能的。所以這種情況要在一句RUN命令中完成,可以通過&符號連線多個RUN語句。RUN後面的必須是雙引號不能是單引號(沒引號貌似也不要緊),command是不會呼叫shell的,所以也不會繼承相應變數,要檢視輸入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。

2.4 CMD

  用法:CMD command param1 param2

  說明:CMD在Dockerfile中只能出現一次,有多個,只有最後一個會有效。其作用是在啟動容器的時候提供一個預設的命令項。如果使用者執行docker run的時候提供了命令項,就會覆蓋掉這個命令。沒提供就會使用構建時的命令。

2.5 EXPOSE

  用法:EXPOSE <port> [<port>...]

  說明:告訴Docker伺服器容器對外對映的容器埠號,在docker run -p的時候生效。

2.6 ENV

  用法:EVN <key> <value> 只能設定一個

       EVN <key>=<value>允許一次設定多個

  說明:設定容器的環境變數,可以讓其後面的RUN命令使用,容器執行的時候這個變數也會保留。

2.7 ADD

  用法:ADD <src>   <dest>

  說明:複製本機檔案或目錄或遠端檔案,新增到指定的容器目錄,支援GO的正則模糊匹配。路徑是絕對路徑,不存在會自動建立。如果源是一個目錄,只會複製目錄下的內容,目錄本身不會複製。ADD命令會將複製的壓縮資料夾自動解壓,這也是與COPY命令最大的不同。

2.8 COPY

  用法:COPY <src> <dest>

  說明:COPY除了不能自動解壓,也不能複製網路檔案。其它功能和ADD相同。

2.9 ENTRYPOINT

  用法:ENTRYPOINT "command" "param1" "param2"

  說明:這個命令和CMD命令一樣,唯一的區別是不能被docker run命令的執行命令覆蓋,如果要覆蓋需要帶上選項--entrypoint,如果有多個選項,只有最後一個會生效。

2.10 VOLUME

  用法:VOLUME ["path"]

  說明:在主機上建立一個掛載,掛載到容器的指定路徑。docker run -v命令也能完成這個操作,而且更強大。這個命令不能指定主機的需要掛載到容器的資料夾路徑。但docker run -v可以,而且其還可以掛載資料容器。

2.11 USER

  用法:USER daemon

  說明:指定執行容器時的使用者名稱或UID,後續的RUN、CMD、ENTRYPOINT也會使用指定的使用者執行命令。

2.12 WORKDIR

  用法:WORKDIR path

  說明:為RUN、CMD、ENTRYPOINT指令配置工作目錄。可以使用多個WORKDIR指令,後續引數如果是相對路徑,則會基於之前的命令指定的路徑。如:WORKDIR  /home  WORKDIR test 。最終的路徑就是/home/test。path路徑也可以是環境變數,比如有環境變數HOME=/home,WORKDIR $HOME/test也就是/home/test。

2.13 ONBUILD

  用法:ONBUILD [INSTRUCTION]

  說明:配置當前所建立的映象作為其它新建立映象的基礎映象時,所執行的操作指令。意思就是,這個映象建立後,如果其它映象以這個映象為基礎,會先執行這個映象的ONBUILD命令。

附一份構建jenkins的Dockerfile