Dockerfile指令詳解

2022-03-13 18:23:16 字數 2806 閱讀 1468

dockerfile中包括from、maintainer、run、cmd、expose、env、add、copy、entrypoint、volume、user、workdir、onbuild等13個指令。下面一一講解。

1.from

格式為from image或from image:tag,並且dockerfile中第一條指令必須是from指令,且在同乙個dockerfile中建立多個映象時,可以使用多個from指令。

2.maintainer

格式為maintainer user_name user_email,指定維護者資訊

3.run

格式為run command或 run ["executable","param1","param2".....],前者在shell終端中執行命令,/bin/sh -c command,例如:/bin/sh -c "echo hello";後者使用exec執行,指定其他執行終端使用run["/bin/bash","-c","echo hello"]

每條run指令將當前的映象基礎上執行指令,並提交為新的映象,命令較長的時候可以使用\來換行。

4.cmd

支援三種格式:

cmd ["executable","param1","param2"],使用exec執行,這是推薦的方式。

cmd command param1 param2 在/bin/sh中執行。

cmd ["param1","param2"] 提供給enterypoint的預設引數。

cmd用於指定容器啟動時執行的命令,每個dockerfile只能有乙個cmd命令,多個cmd命令只執行最後乙個。若容器啟動時指定了執行的命令,則會覆蓋掉cmd中指定的命令。

5.expose

格式為 expose port [port2,port3,...],例如expose 80這條指令告訴docker伺服器暴露80埠,供容器外部連線使用。

在啟動容器的使用使用-p,docker會自動分配乙個埠和**指定的埠,使用-p可以具體指定使用哪個本地的埠來對映對外開放的埠。

6.env

格式為:evn key value 。用於指定環境變數,這些環境變數,後續可以被run指令使用,容器執行起來之後,也可以在容器中獲取這些環境變數。

例如env word hello

run echo $word

7.add

格式:add src dest

該命令將複製指定本地目錄中的檔案到容器中的dest中,src可以是是乙個絕對路徑,也可以是乙個url或乙個tar檔案,tar檔案會自動解壓為目錄。

8.copy

格式為:copy src desc

複製本地主機src目錄或檔案到容器的desc目錄,desc不存在時會自動建立。

9.entrypoint

格式有兩種:

entrypoint ["executable","param1","param2"]

entrypoint command param1,param2 會在shell中執行。

用於配置容器啟動後執行的命令,這些命令不能被docker run提供的引數覆蓋。和cmd一樣,每個dockerfile中只能有乙個entrypoint,當有多個時最後乙個生效。

10.volume

格式為 volume ["/data"]

作用是建立在本地主機或其他容器可以掛載的資料卷,用來存放資料。

11.user

格式為:user username

指定容器執行時的使用者名稱或uid,後續的run也會使用指定的使用者。要臨時使用管理員許可權可以使用sudo。在user命令之前可以使用run命令建立需要的使用者。

例如:run groupadd -r docker && useradd -r -g docker docker

12.workdir

格式: workdir /path

為後續的run cmd entrypoint指定配置工作目錄,可以使用多個workdir指令,若後續指令用得是相對路徑,則會基於之前的命令指定路徑。

13.onbuild

則基於映象a建立新的映象時,新的dockerfile中使用from a 指定基映象時,會自動執行onbbuild指令內容,等價於在新的要構建映象的dockerfile中增加了兩條指令:

from a

14.docker build

建立好dockerfile之後,通過docker build命令來建立映象,該命令首先會上傳dockerfile檔案給docker伺服器端,伺服器端將逐行執行dockerfile中定義的指令。

通常建議放置dockerfile的目錄為空目錄。另外可以在目錄下建立.dockerignore檔案,讓docker忽略路徑下的檔案和目錄,這一點與git中的配置很相似。

通過 -t 指定映象的標籤資訊,例如:docker build -t regenzm/first_image . ##"."指定的是dockerfile所在的路徑

Dockerfile 指令詳解

一種通過commit的方式 把做了一系列操作的容器關閉,然後利用docker的commit指令 dockercommit 容器id 映象名 tag。然後dockerpush到映象倉庫。別人pull下來的再次啟動的時候,就是你當前的操作的形態。另一種是通過dockerfile構建的方式 把操作的步驟通...

Dockerfile指令詳解

dockerfile中包括from maintainer run cmd expose env add copy entrypoint volume user workdir onbuild等13個指令。下面一一講解。1.from 格式為from image或from image tag,並且doc...

Dockerfile指令詳解

什麼是dockerfile dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。當你在使用...