什麼是dockerfile
dockerfile是用來構建docker映象的構建檔案,是由一系列的命令和引數構成的指令碼
dokcerfile的構建步驟
a. 編寫dokcerfile檔案
b. docker build 生成新的映象
c. docker run 執行映象
dockerfile構建過程解析
基礎知識
每條關鍵字指令都必須為大寫字母後面要跟隨至少乙個引數
指令從上到下順序執行
#表示注釋
每條指令都會建立乙個新的映象層,並對映象進行提交
大致流程
docker從基礎映象執行乙個容器
執行一條指令並對容器進行修改
執行類似於docker commit的操作提交乙個新的映象
docker再基於剛提交的新的映象執行乙個新的容器
執行dockerfile的下乙個指令再從執行第2點直到沒有指令
dockerfile語法
run :容器構建時需要執行的命令
expose :當前容器對外暴露的埠
workdir :指定在建立容器後,終端預設登陸進來的工作目錄,以及之後的cmd命令都是基於這個目錄的
env :用來在構建映象過程中設定環境變數
add :將宿主機目錄下的檔案拷貝進映象並且add命令會自動處理url和解壓tar包
# 例子
# 第乙個引數為:宿主機中的目錄,相對於dockerfile檔案
# 第二個引數為容器中的目錄,相對於workdir
add (宿主機檔案)
(容器內部的目錄)
copy 類似add(但不會自動處理url和解壓tar包),拷貝檔案和目錄到映象中 ,語法copy src dest copy
["src"
,"dest"
]volume 容器資料卷,用於資料儲存和持久化工作
cmd 指定乙個容器啟動時要執行的命令格式
shell(常規shell命名): cmd (命令)
exec(執行指令碼):cmd [
'可執行檔案'
,"引數1"
,"引數2",.
..] dockerfile中可以有多個cmd指令,但只有最後乙個生效,可以被docker run之後的引數替換
enteypoint 指定乙個容器啟動時要執行的命令
entrypoint的目地和cmd一樣,都是在指定容器啟動程式及引數,區別是entrypoint通過把所有的命令追加在一起執行,docker run之後的引數也會追加在後面執行
maintainer 映象維護者的姓名和郵箱位址
obbuild 當構建乙個被繼承的dockerfile時執行命令,父映象在被子映象繼承後觸發父映象的onbuild
簡單案例
基於centos構建乙個帶有vim的centos
# 設定 繼承容器
from centos
# 設定 作者 郵箱
maintainer wcong<[email protected]>
# 定義變數mypath
env mypath "/usr/local"
# 設定進入容器的初識工作目錄
workdir $mypath
# 安裝 vim
run yum install -y vim
# 暴露埠 提示作用
expose 80
# 列印 測試
cmd echo
$mypath
cmd echo
"this is test ------- success"
cmd /bin/bash
打包成映象並測試
# 基於dockerfile構建映象,名稱不能有大寫,名稱必須是dockerfile
docker build -t mycentos:1.0 .
# 注意後面有個 .,表示當前目錄
# 若dockerfile的名稱不是dockerfile,則需要通過-f 指定
# docker build -f /home/test/docfile -t mycentos:1.0 .
# 執行
docker run -d -p 88:80 mycentos:1.0
總結
從應用軟體的角度來看,dockerfile、docker映象與docker容器分別代表軟體的三個不同階段,
dockerfile,需要定義乙個dockerfile,dockerfile定義了程序需要的一切東西。 dockerfile涉及的內容包括執行**或者是檔案、環境變數、依賴包、執行時環境、動態鏈結庫、作業系統的發行版、服務程序和核心程序(當應用程序需要和系統服務和核心程序打交道,這時需要考慮如何設計namespace的許可權控制)等等;
docker映象,在用dockerfile定義乙個檔案之後,docker build時會產生乙個docker映象,當執行 docker映象時,會真正開始提供服務;
docker容器,容器是直接提供服務的。
其他案例:基於dockerfile構建映象並執行jar包
Dockerfile語法總結
指令的一般格式為instruction arguments,指令包括from maintainer run等。格式為from或from 第一條指令必須為from指令。並且,如果在同乙個dockerfile中建立多個映象時,可以使用多個from指令 每個映象一次 格式為maintainer,指定維護者...
Dockerfile編寫語法
docker映象本質上就是乙個個基礎映象的堆疊,為了做出我們想要的映象,我們需要考慮最終映象所需的所有基礎環境,然後一層層堆疊.也就是不斷以基礎映象搭建上層映象.先看例子 version 1.0.0 create time 2015 12 25 11 04 author description 基於...
Docker file 語法筆記
instruction argument,命令不區分大小寫,但約定為全部大寫 必須以from命令開始,命令出現的順序就是被執行的順序 from maintainer run 如 cd target tar zxvf datastudio.tar.gz chmod x datastudio bin r...