Docker Dockerfile

百聯達發表於2017-10-18
一:docker build命令


一般來說,使用者主要使用Dockerfiledockers build命令來完成一個新映象的建立。

命令格式如下: docker build  PATH|URL

PATHURL所指向的檔案成為context(上下文)PATH通常是一個含有Dockerfile檔案的目錄,URL可以是一個Github的地址。

如:docker build -t 映象名稱  目錄


二:Dockerfile簡介

Dockerfile描述了組裝映象的步驟,其中每條指令都是單獨執行的。除了FROM指令,其他每一天指令都會在上一條指令所生成映象的基礎上執行,執行完成後生成一個新的映象層,新的映象層覆蓋在原來的映象之上從而形成了新的映象。Dockerfile所生成的最終映象就是在基礎映象上面疊加一層層的映象層組建的。

 

為了提高映象構建的速度,Docker daemon會快取構建過程中的中間映象。

 

三:Dockerfile指令

 

Dockerfile中,指令不區分大小寫,但是為了與引數區分,推薦大寫。Docker會順序執行Dockerfile中的指令。在Dockerfile中以#開頭的行是註釋,而在其他位置出現的#會被當成引數。

 

1.  第一條指令必須是FROM指令,它用於指定構建映象的基礎映象。

2.   MAINTAINER

維護者 通常放到FROM後面

3.   ADD

ADD命令有兩個引數,源和目標。它的基本作用是從源系統的檔案系統上覆制檔案到目標容器的檔案系統。如果源是一個URL,那該URL的內容將被下載並複製到容器中。

如:ADD /my_app_folder /my_app_folder

4.  CMD

RUN命令相似,CMD可以用於執行特定的命令。和RUN不同的是,這些命令不是在映象構建的過程中執行的,而是在用映象構建容器後被呼叫。

Dockerfile.中只能有一個CMD指令。 如果你指定了多個,那麼最後個CMD指令是生效的。

CMD application "argument", "argument"

如:CMD "echo" "Hello docker!"

5.  ENTRYPOINT

配置容器啟動後執行的命令,並且不可被 docker run 提供的引數覆蓋。

 

每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個起效。

 

ENTRYPOINT 幫助你配置一個容器使之可執行化,如果你結合CMD命令和ENTRYPOINT命令,你可以從CMD命令中移除“application”而僅僅保留引數,引數將傳遞給ENTRYPOINT命令。

 

# Usage: ENTRYPOINT application "argument", "argument", ..

# Remember: arguments are optional. They can be provided by CMD

# or during the creation of a container.

ENTRYPOINT echo

# Usage example with CMD:

# Arguments set with CMD can be overridden during *run*

CMD "Hello docker!"

ENTRYPOINT echo

6.  ENV

ENV命令用於設定環境變數。這些變數以”KEY=VALUE”的形式存在,並可以在容器內被指令碼或者程式呼叫。這個機制給在容器中執行應用帶來了極大的便利。

如:ENV SERVER_WORKS 4

7.  EXPOSE

EXPOSE用來指定埠,使容器內的應用可以透過埠和外界互動。

如:EXPOSE 8080

8.  RUN

RUN命令是Dockerfile執行命令的核心部分。它接受命令作為引數並用於建立映象。不像CMD命令,RUN命令用於建立映象(在之前COMMIT的層之上形成新的層)。

 

# Usage: RUN [command]

RUN aptitude INSTALL -Y riak

9.  USER

USER命令用於設定執行容器的UID

# Usage: USER [UID]

USER 751

10. VOLUME

VOLUME命令用於讓你的容器訪問宿主機上的目錄。透過 VOLUME 指令建立的掛載點,無法指定主機上對應的目錄,是自動生成的。

# Usage: VOLUME ["/dir_1", "/dir_2" ..]

VOLUME ["/my_files"]

11. WORKDIR

WORKDIR命令用於設定CMD指明的命令的執行目錄。

# Usage: WORKDIR /path

WORKDIR ~/

12. COPY

COPY  

複製本地所指向的檔案或目錄,將它新增到新映象中。

 

13. LABEL

定義一個映象標籤



四:舉例

redis 主從複製,透過Dockerfile建立redis-master,redis-slave映象

Dockerfile

點選(此處)摺疊或開啟

  1. FROM redis:4.0.2
  2. COPY redis.conf /usr/local/bin/redis.conf
  3. CMD ["redis-server","/usr/local/bin/redis.conf"]
redis.conf 參照上一篇博文

檔案目錄



建立redis-master映象
docker build -t redis-master:latest .

建立redis-slave映象
docker build -t redis-slave:latest .

啟動redis-master容器
docker run -v /home/redis/6379:/data --name redis-master -d redis-master

啟動redis-slave1容器
docker run  -v /home/redis/6380:/data  -it --name redis-slave1   --link redis-master:master -d  redis-slave

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2146118/,如需轉載,請註明出處,否則將追究法律責任。

相關文章