Dockerfile語法和概念

2021-10-07 03:35:02 字數 2635 閱讀 5771

什麼是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...