什麼是dockerfile
dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。
當你在使用 程式設計客棧docker構建映象的時候,每乙個程式設計客棧命令都會在前乙個命令的基礎上形成乙個新層。這些基礎映象可以用於建立新的容器。本篇文章將手把手教您如何從基礎映象,一步一步,一層一層的從dockerfile構建容器的過程。
dockerfile示例
# version 1.0
form ubuntu:14.04
maintainer mao "[email protected]"
run apt-get update && apt-get install -y nginx
run echo 'hello,i am work' > /usr/share/nginx/html/index.html
expose 80 80
docker執行步驟分析
以上dockerfile示例中,每條指令都會建立乙個新的映象層並對映象進行提交.docker執行dockerfile大致流程:
dockerfile指令彙總及解析
maintainer
我建議這個命令放在dockerfile的起始部分,雖然理論上它可以放置於dockerfile的任意位置。這個命令用於宣告作者,並應該放在from的後面。
# maintainer [name] [email]
maintainer authors_name "[email protected]"
fro程式設計客棧m
from命令可能是最重要的dockerfile命令。改命令定義了使用哪個基礎映象啟動構建流程。基礎映象可以為任意鏡 像。如果基礎映象沒有被發現,docker將試圖從docker image index來查詢該映象。from命令必須是dockerfile的首個命令。
# from [image name]
from ubuntu
addadd命令有兩個引數,源和目標。它的基本作用是從源系統的檔案系統上覆制檔案到目標容器的檔案系統。如果源是乙個url,那該url的內容將被**並複製到容器中。
# add [source directory or url] [destination directory]
add /my_app_folder /my_app_folder
runrun命令是dockerfile執行命令的核心部分。它接受命令作為引數並用於建立映象。不像cmd命令,run命令用於建立映象(在之前commit的層之上形成新的層)。
# run [command]
run apt-get update
cmd和run命令相似,cmd可以用於執行特定的命令。和run不同的是,這些命令不是在映象構建的過程中執行的,而是在用映象構建容器後被呼叫。
# cmd application "argument", "argument", ..
cmd "echo" "hello mao!"
entrypoint
entrypoint幫助你配置乙個容器使之可執行化,如果你結合cmd命令和entrypoint命令,你可以從cmd命令中移除「application」而僅僅保留引數,引數將傳遞給entrypoint命令。
# usage: entrypoint application "argument", "argument", kovmfkr..
# 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
envenv命令用於設定環境變數。這些變數以」key=value」的形式存在,並可以在容器內被指令碼或者程式呼叫。這個機制給在容器中執行應用帶來了極大的便利。
# env key value
env server_works 4
user
user命令用於設定執行容器的uid。
# user [uid]
user 751
volume
volume命令用於讓你的容器訪問宿主機上的目錄。
# volume ["/dir_1", "/dir_2" ..]
volume ["/my_files"]
workdir
workdir命令用於設定cmd指明的命令的執行目錄。
# workdir /path
workdir ~/
expose
expose指令用來告訴docker這個容器在執行時會監聽哪些埠,docker在連線不同的容器(使用–link引數)時使用這些資訊;
兩個docker的核心概念是可重複和可移植。映象應該可以執行在任何主機上並且執行盡可能多的次數。在 dockerfile中你有能力對映私有和公有埠,但是你永遠不要通過dockerfile對映公有埠。通過對映公有埠到主機上,你將只能執行乙個容器化應用程式實程式設計客棧例。(譯者注:執行多個埠不就衝突啦)
# expose [port]
# private and public mapping
expose 80:8080
# private only
expose 80
最後我們來個簡單的示例吧
使用dockerfile自動構建nginx容器
因為我們命令docker用當前目錄的nginx的配置檔案替換預設的配置檔案,我們要保證這個新的配置檔案存在。在dockerfile存在的目錄下,建立nginx.conf:
sudo nano nginx.conf
然後用下述內容替換原有內容:
讓我們儲存nginx.conf。之後我們就可以用dockerfile和配置檔案來構建映象。
本文標題: 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中包括from maintainer run cmd expose env add copy entrypoint volume user workdir onbuild等13個指令。下面一一講解。1.from 格式為from image或from image tag,並且doc...