docker學習 Dockfile詳解

2021-09-24 22:33:23 字數 2081 閱讀 8813

dockfile是乙個用於編寫docker映象生成過程的檔案,其有特定的語法。在乙個資料夾中,如果有乙個名字為dockfile的檔案,其內容滿足語法要求,在這個資料夾路徑下執行命令:docker build --tag name:tag .,就可以按照描述構建乙個映象了。name是映象的名稱,tag是映象的版本或者是標籤號,不寫就是lastest。注意後面有乙個空格和點。

dockerfile的基本指令有十三個,分別是:from、maintainer、run、cmd、expose、env、add、copy、entrypoint、volume、user、workdir、onbuild。下面對這些指令的用法一一說明。

用法:from

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

用法:maintainer

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

用法:run "command" "param1" "param2"

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

用法:cmd command param1 param2

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

用法:expose [...]

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

用法:evn 只能設定乙個

evn =允許一次設定多個

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

用法:add

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

用法:copy

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

用法:entrypoint "command" "param1" "param2"

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

用法:volume ["path"]

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

用法:user daemon

說明:指定執行容器時的使用者名稱或uid,後續的run、cmd、entrypoint也會使用指定的使用者執行命令。

用法:workdir path

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

用法:onbuild [instruction]

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

docker學習 docker容器

1.容器檢視 已經啟動的容器 docker ps 所有的容器 docker ps a2.啟動容器相關引數 互動式容器 退出時容器處於停止狀態,無法使用 docker run it name mynginx nginx bin bash 退出當前容器 exit 守護式容器 埠88是宿主機的對映埠 do...

docker學習 docker安裝

1 解除安裝已經存在的docker 執行命令 yum remove docker docker client docker client latest docker common docker latest docker latest logrotate docker logrotate docke...

Docker學習 Docker映象

一 列出映象 命令 docker images optsions repositort a 標識列出所有 f 寫過濾條件 no trunc 不截斷id q 只顯示唯一id repository是倉庫名字 registry代表的是大庫 tag標籤名字 對應版本,id唯一標識 庫名字 標籤 對應乙個id...