docker之映象製作

2021-08-13 04:58:48 字數 1614 閱讀 4001

docker映象是乙個多層的檔案系統,製作映象使用的dockerfile每一行可以看作一層。

所有的映象必須基於乙個最基礎的映象,目前所有映象都是基於base-ubuntu:latest這個映象。

製作映象的輸入檔案,以下檔案是base-ubuntu:latest映象的dockerfile,

from ubuntu:16.04

maintainer dongquan_wang"[email protected]"

add sources.list/etc/apt/sources.list

在當前dockerfile所在的目錄,只需要一條命令,docker  build -t   image_name   .

注意末尾必須要有乙個點號,否則會報錯誤,此點號是為docker製作映象時使用。

使用命令docker  images 檢視,可以看到自己製作的映象的名字。所有的映象預設都儲存在宿主機的/var/lib/docker目錄下,乙個映象不是乙個檔案,其中的儲存機制非常複雜,建議初學者不要深究。

(1)  from,基礎映象名稱,比如django映象就是以python3映象為基礎的

(2)  maintainer,維護人員,只起描述作用,私有映象倉庫無用

(3)  add,檔案新增到映象,如果檔案為壓縮格式,(.gz,.tar.gz,.tgz),會自動解壓縮

(4)  copy,檔案新增到映象,但不作解壓縮動作

(5)  run,用得最多的指令,在映象中執行命令,多用於apt-get(pip)安裝軟體

(6)  workdir,指定該映象啟動的容器中的當前目錄,對於基於django的映象,會指定為工程的目錄。

(7)  entrypoint,指定該映象啟動的容器的首個程序,注意此程序必須是掛住終端不能退出的,即不能為後台程序。可以指定引數。

(8)  cmd,指定命令引數,如果entrypoint不存在,則使用shell程序,否則直接將此命令作為首個程序啟動。如果entrypoint存在,則將此引數附著其後形成真正的命令啟動。

(9)  volume,指定資料卷,表明該映象啟動的容器中,此目錄為資料卷,即使容器停止並刪除,資料卷的內容仍然存在。

注意以上的命令中,entrypoint、cmd、 volumes指令只和容器相關,當容器啟動前可以指定引數覆蓋,即只有此映象啟動後才有意義,其他指令會直接作用於映象。

apt-get安裝時會有互動,使用引數-y表示全部選擇yes;在安裝mysql等軟體時會有配置,比如使用者名稱密碼,請務必在apt-get之前新增字首debian_frontend=noninteractive,表示不進入互動環境,如此才可以安裝成功。

dockerfile的一行(除maintainer外)對應映象的一層,為使層數足夠小,故可以將類似的命令串起來,比如run 指令,可以使用&&連線多個指令,如此也只有一層。

製作映象一次成功後,後續再使用同樣的dockerfile製作映象會非常快,這是由於cache的原因,因此在書寫

dockerfile

時必須將經常變化的行放置到最後,如此前面的行就不需要再編譯了。舉例來說,對於django的工程映象,最後一條指令就是幣制當前的工程目錄內容到映象中,如此後續再編譯映象時可以加快映象編譯過程。

製作docker映象

命令docker build,從零開始來建立乙個新的映象。為此,我們需要建立乙個 dockerfile 檔案,其中包含一組指令來告訴 docker 如何構建我們的映象 指定基礎映象 from openjdk 8 dockerfile使用變數 可以在dockerfile中進行引用 工作目錄 指定ver...

製作docker映象

基礎環境說明 cat etc redhat release centos release 6.8 final 設定 docker 映象源 yum install y yum priorities rpm ivh rpm import etc pki rpm gpg rpm gpg key epel ...

Docker映象製作

copy on write 寫時複製 docker映象實際上乙個檔案系統,但只有頂層可以讀寫。dockerfile是軟體的原材料,docker映象是軟體的交付品,而docker容器則可以認為是軟體的執行態。從應用軟體的角度來看,dockerfile docker映象與docker容器分別代表軟體的三...