Docker高階實踐 Dockerfile

2021-10-06 23:42:53 字數 4956 閱讀 8538

docker基礎

docker學習筆記——docker核心技術(映象)

docker學習筆記——docker核心技術(容器)

docker學習筆記——docker核心技術(資料)

docker學習筆記——docker核心技術(網路)

docker高階實踐-dockerfile

dockerfile

基礎指令詳解

from

from

#格式:

from

from

:#解釋:

#from 是 dockerfile 裡的第一條而且只能是除了首行注釋之外的第一條指令

#可以有多個from語句,來建立多個image

#from 後面是有效的映象名稱,如果該映象沒有在你的本地倉庫,那麼就會從遠端倉庫pull取,如果遠端也

沒有,就報錯失敗

#下面所有的 系統可執行指令 在 from 的映象中執行。

maintainer

maintainer

#格式:

maintainer #解釋:

#指定該dockerfile檔案的維護者資訊。類似我們在docker commit 時候使用-a引數指定的資訊

run

run

#格式:

run (shell模式)

run[

"executable"

,"param1"

,"param2"

](exec 模式)

#解釋:

#表示當前映象構建時候執行的命令,如果有確認輸入的話,一定要在命令中新增 -y

#如果命令較長,那麼可以在命令結尾使用 \ 來換行

#生產中,推薦使用上面陣列的格式

#注釋:

#shell模式:類似於 /bin/bash -c command

#舉例: run echo hello

#exec模式:類似於 run["/bin/bash", "-c", "command"]

#舉例: run["echo", "hello"]

expose

expose

#格式:

expose [..

.]#解釋:

設定docker容器對外暴露的埠號,docker為了安全,不會自動對外開啟埠,如果需要外部提供訪問,

還需要啟動容器時增加-p或者-p引數對容器的埠進行分配。

執行時指令詳解

cmd

cmd

#格式:

cmd [

"executable"

,"param1"

,"param2"

](exec 模式)推薦

cmd command param1 param2 (shell模式)

cmd [

"param1"

,"param2"

] 提供給entrypoint的預設引數;

#解釋:

#cmd指定容器啟動時預設執行的命令

#每個dockerfile只能有一條cmd命令,如果指定了多條,只有最後一條會被執行

#如果你在啟動容器的時候使用docker run 指定的執行命令,那麼會覆蓋cmd命令。

#舉例: cmd ["/usr/sbin/nginx","-g","daemon off;"]

"/usr/sbin/nginx" nginx命令

"-g" 設定配置檔案外的全域性指令

"daemon off;" 後台守護程式開啟方式 關閉

entrypoint

entrypoint

#格式:

entrypoint [

"executable"

,"param1"

,"param2"

](exec 模式)

entrypoint command param1 param2 (shell 模式)

#解釋:

#和cmd 類似都是配置容器啟動後執行的命令,並且不會被docker run 提供的引數覆蓋。

#每個dockerfile 中只能有乙個entrypoint,當指定多個時,只有最後乙個起效。

#生產中我們可以同時使用entrypoint 和cmd,

#想要在docker run 時被覆蓋,可以使用"docker run --entrypoint"

#entrypoint指令實踐:

#修改dockerfile檔案內容:

entrypoint [

"/usr/sbin/nginx"

,"-g"

,"daemon off;"

]

注釋任何docker run設定的命令引數或者cmd指令的命令,都將作為entrypoint 指令的命令引數,追加到entrypoint指令之後

檔案編輯指令詳解

add

#add

#格式:

add ...

add ["",

...""

]#解釋:

#將指定的檔案複製到容器檔案系統中的

#src 指的是宿主機,dest 指的是容器

#所有拷貝到container 中的檔案和資料夾許可權為0755,uid 和gid 為0

#如果檔案是可識別的壓縮格式,則docker 會幫忙解壓縮

#注意:

#1、如果源路徑是個檔案,且目標路徑是以/ 結尾, 則docker 會把目標路徑當作乙個目錄,會把原始檔拷貝到該目錄下;

#如果目標路徑不存在,則會自動建立目標路徑。

#2、如果源路徑是個檔案,且目標路徑是不是以/ 結尾,則docker 會把目標路徑當作乙個檔案。

#如果目標路徑不存在,會以目標路徑為名建立乙個檔案,內容同原始檔;

#如果目標檔案是個存在的檔案,會用原始檔覆蓋它,當然只是內容覆蓋,檔名還是目標檔名。

#如果目標檔案實際是個存在的目錄,則會原始檔拷貝到該目錄下。注意,這種情況下,最好顯示的以/ 結尾,以避免混淆。

#3、如果源路徑是個目錄,且目標路徑不存在,則docker 會自動以目標路徑建立乙個目錄,把源路徑目錄下的檔案拷貝進來。

#如果目標路徑是個已經存在的目錄,則docker 會把源路徑目錄下的檔案拷貝到該目錄下。

#4、如果原始檔是個壓縮檔案,則docker 會自動幫解壓到指定的容器目錄中。

copy

#copy

#格式:

copy..

.copy[""

,...

""]#解釋:

#copy 指令和add 指令功能和使用方式類似。只是copy 指令不會做自動解壓工作。

#單純複製檔案場景,docker 推薦使用copy

volume

#volume

#格式:

volume [

"/data"

]#解釋:

#volume 指令可以在映象中建立掛載點,這樣只要通過該映象建立的容器都有了掛載點

#通過volume 指令建立的掛載點,無法指定主機上對應的目錄,是自動生成的。

#舉例:

volume [

]

環境指令詳解

env

#env

#格式:

env (一次設定乙個環節變數)

env =.

.. (一次設定乙個或多個環節變數)

#解釋:

#設定環境變數,可以在run 之前使用,然後run 命令時呼叫,容器啟動時這些環境變數都會被指定

workdir

#workdir

#格式:

workdir /path/to/workdir (shell 模式)

#解釋:

#切換目錄,為後續的run、cmd、entrypoint 指令配置工作目錄。相當於cd

#可以多次切換(相當於cd 命令),

#也可以使用多個workdir 指令,後續命令如果引數是相對路徑,則會基於之前命令指定的路徑。例如

#舉例:

workdir /a

workdir b

workdir c

run pwd

#則最終路徑為/a/b/c

user與arg

#user

#格式:

user daemon

#解釋:

#指定執行容器時的使用者名稱和uid,後續的run 指令也會使用這裡指定的使用者。

#如果不輸入任何資訊,表示預設使用root 使用者

#arg

#格式:

arg [=]

#解釋:

#arg 指定了乙個變數在docker build 的時候使用,可以使用--build-arg =來指定引數的值,不過如果構建的時候不指定就會報錯。

觸發器指令詳解

onbuild

onbuild

#格式:

onbuild [command]

#解釋:

#當乙個映象a被作為其他映象b的基礎映象時,這個觸發器才會被執行,

#新映象b在構建的時候,會插入觸發器中的指令。

#使用場景對於版本控制和方便傳輸,適用於其他使用者。

Docker學習收藏系列(一) 認識Docker

1 docker 是乙個軟體平台,讓您可以快速構建 測試和部署應用程式。docker 將軟體打包成名為容器的標準化單元,這些單元具有執行軟體所需的所有功能,包括庫 系統工具 和執行時。使用 docker,您可以將應用程式快速部署和擴充套件到任何環境中,並且知道您的 將執行。2 docker工作原理 ...

Docker系列四 使用UI管理docker容器

一 什麼是portainer?docker pull portainer portainer三 執行portainer portainer執行方式有以下兩種方式 1 單機版執行 如果僅有乙個docker宿主機,則可使用單機版執行,執行以下命令就可以啟動了 docker run d p 9000 90...

docker映象的生成及上傳到dockerhub

docker commit options container repository tag a 提交的映象作者 c 使用dockerfile指令來建立映象 m 提交時的說明文字 p 在commit時,將容器暫停。docker commit a yyk m web a404c6c174a2 web1...