Dockfile編寫常見命令

2022-08-23 19:33:15 字數 3498 閱讀 7238

指定哪種映象作為新映象的基礎映象

from busybox:latest
指定標籤如

label maintainner="[email protected]"
設定環境變數以供容器和build過程使用

env host=0.0.0.0 \

port=80

在新映象內部執行的命令,比如安裝一些軟體、配置一些基礎環境,可使用\來換行,這種格式預設前面執行了sh -c,如:

run echo 'hello docker!' \

> /usr/local/file.txt

也可以使用exec格式run ["executable", "param1", "param2"]的命令,如

run ["apt-get","install","-y","nginx"]
要注意的是,executable是命令,後面的param是引數

注意 ,exec格式,不能解析前面定義得env變數

將主機的檔案複製到映象內,如果目的位置不存在,docker會自動建立所有需要的目錄結構,但是它只是單純的複製,並不會去做檔案提取和解壓工作。如:

注意,複製資料夾時,不會複製資料夾本身,只會把資料夾中得內容複製到容器,如果也想要把資料夾複製過去,則指定容器路徑時也需把資料夾名稱也帶上

將主機的檔案複製到映象中,跟copy一樣,限制條件和使用方式都一樣,如:

但是add會對壓縮檔案(tar, gzip, bzip2, etc)做提取和解壓操作。

暴露映象的埠供主機做對映,啟動映象時,使用-p引數來講映象埠與宿主機的隨機埠做對映。使用方式(可指定多個):

expose 8080 

expose 8081

...

在構建映象時,指定映象的工作目錄,之後的命令都是基於此工作目錄,如果不存在,則會建立目錄。如

workdir /usr/local

workdir webservice

run echo 'hello docker' > text.txt

...

最終會在/usr/local/webservice/目錄下生成text.txt檔案

當乙個包含onbuild命令的映象被用作其他映象的基礎映象時(比如使用者的映象需要從某為準備好的位置新增源**,或者使用者需要執行特定於構建映象的環境的構建指令碼),該命令就會執行。

如建立映象image-a

from ubuntu

...onbuild add . /var/www

...

然後建立映象image-b,指定image-a為基礎映象,如

from image-a

...

然後在構建image-b的時候,日誌上顯示如下:

step 0 : from image-a

# execting 1 build triggers

step onbuild-0 : add . /var/www

...

指定該映象以什麼樣的使用者去執行,如:

user mongo
用來向基於映象建立的容器新增卷。比如你可以將mongodb映象中儲存資料的data檔案指定為主機的某個檔案。(容器內部建議不要儲存任何資料)

如:

volume /data/configdb
容器啟動時需要執行的命令,如:

cmd /bin/bash
同樣可以使用exec語法,如

cmd ["/bin/bash"]
當有多個cmd的時候,只有最後乙個生效。 cmd格式可以使用之前定義得env變數,因為cmd格式是通過sh -c啟動得。exec格式則不可以

作用和用法和cmd一模一樣

注意:entrypoint 和cmd同時存在得話,則cmd則成為引數傳給entrypoint

#通過執行容器中的指令來判斷容器是否健康,cmd可以是shell或是exec形式

healthcheck [options] cmd command

#禁止所有父映象的健康檢查

healthcheck none

這條指令用於檢查容器的健康狀況

如果容器指定了健康檢查,會新增額外的health欄位,這個欄位一開始是starting,當健康檢查通過以後,會更改為healthy,如果幾次嘗試都失敗,則會設定為unhealthy

options欄位

#兩次健康檢查的間隔

--interval=duration(預設為30s)

健康檢查命令執行超時時間,如果超過這個時間,本次健康檢查視為失敗

--timeout=duration(預設為30s)

#應用啟動的初始化時間,在啟動過程中的健康檢查失效不會計入

--start--period=duration(預設為0s)

#當連續失敗指定次數後,則將容器狀態視為unhealthy

--retries=n(預設為3次)

如果有多條healthcheck,只有最後一條才會起作用

這條命令執行完畢後,會輸出乙個數字:

#成功0:success

#失敗1:unhealthy

#保留字段,沒有意義

2:reserved

shell ["executable", "parameters"]

用於指定shell形式的命令執行的shell環境,linux預設的shell環境為["/bin/sh","-c"],windwos預設為["cmd","/s","/c"]

stopsignal signal

使用這個指令允許使用者自定義應用在收到 docker stop 時所傳送的訊號

語法:

arg [=]

設定變數命令,arg命令定義了乙個變數,在docker build建立映象的時候,使用 --build-arg =來指定引數

如果使用者在build映象時指定了乙個引數沒有定義在dockerfile中,那麼將有乙個warning

提示如下:

[warning] one or more build-args [foo] were not consumed.

我們可以定義乙個或多個引數,如下:

arg tag

arg buildno

from busybox

...也可以給引數乙個預設值:

arg tag=v14-alpine

arg buildno=1

from busybox:$

...如果我們給了arg定義的引數預設值,那麼當build映象時沒有指定引數值,將會使用這個預設值

自己編寫more命令

more命令可以實現的功能是很豐富的,包括模式查詢。今天我們只是實現它的乙個基本功能 more 檔案列表 在螢幕正文顯示已讀的百分比 按下回車顯示下一行 按下空格顯示下一屏 按下q退出 按回車 空格 q時沒有回顯 這裡有幾個問題 要在螢幕正文顯示已讀的百分比,那我們必須先獲取檔案列表中各個檔案的長度...

如何編寫who命令

總結自書 unix linux程式設計實踐教程 1.輸入命令 顯示使用者名稱 終端名 登入時間等資訊 2.閱讀手冊 man who name 命令名以及命令的簡短說明 synopsys 概要 命令格式 description 命令功能的詳細闡述以及引數選項 1.閱讀手冊 了解到與utmp檔案有關 w...

ls命令的編寫

目錄結構體dirent stat函式從檔名獲得資訊 其中三個特殊位 set user id 用來給程式額外的許可權,如passwd修改密碼 set group id 用來給程式某個組的訪問許可權 sticky位 告訴程式即使沒有人使用程式,也要放在交換空間 使用掩碼來處理st mode,017000...