Dockerfile基本結構和指令

2021-09-10 18:50:09 字數 4454 閱讀 6566

dockerfile由一行行命令語句組成,支援以#開頭的注釋行。一般分為四個部分:基礎映象資訊,維護者資訊,映象操作指令和容器啟動時執行指令。例如:

# this dockerfile uses the ubuntu image

# version 2 -edition 1

# author: docker_user

# command format: instruction [arguments / command] ..

# 第一行必須指定基於的基礎映象

from ubuntu

# 維護者資訊

maintainer docker_user [email protected]

# 映象的操作指令

run echo

"deb raring main universe"

>> /etc/apt/sources.list

run apt-get update &&

apt-get

install -y nginx

run echo

"\ndaemon off;"

>> /etc/nginx/nginx.conf

# 容器啟動時執行指令

cmd /usr/sbin/nginx

每執行一條run指令,映象新增新的一層,並提交。

下面兩個dockerhub上的dockerfile的例子。

# nginx

## version 0.0.1

from ubuntu

maintainer victor vieux

run apt-get update &&

apt-get

install -y inotify-tools nginx apache2 openssh-server

# 在ubuntu的父映象基礎上安裝inotify-tools,nginx,apache2,openssh-server,從而建立乙個新的nginx映象。

# firefox over vnc

##version 0.3

from ubuntu

# install vnc,xvfb in order to create a 'fake' display and firefox

run apt-get update &&

apt-get

install -y x11vnc firefox

run mkdir /.vnc

# setup a pssword

run x11vnc -storepasswd 1234 ~/.vnc/passwd

#autostart firefox

run bash -c 'echo "firefox" >> /.bashrc'

expose 5900

cmd [

"x11vnc", "-forever", "-usepw", "-create"

]# 基於ubuntu父映象,安裝firefox和vnc軟體,啟動後,使用者可以通過5900埠通過vnc方式使用firefox。

指令的一般格式為instruction arguments,指令包括from、maintainer、run等。

from

格式為from  或者from :。
第一條指令必須為from指令,如果同乙個dockerfile中建立多個映象時,可以使用多個from指令。

maintainer

格式為maintainer ,指定維護者資訊。

run

格式為run  或者run [

"executable", "param1", "param2"

]。

前者在shell終端中執行,即/bin/sh -c ;後者則使用exec執行。指定使用其他終端可以通過第二種方式實現,例如run ["/bin/bash", 「-c」, 「echo hello」]。

每條run指令將在當前映象基礎上執行命令,並提交為新的映象。當命令較長時可以使用\來換行。

cmd

支援三種格式:

- cmd [

"executable", "param1", "param2"

]使用exec執行,推薦方式。

- cmd command param1 param2 在/bin/sh中執行,需要互動的應用。

- cmd [

"param1", "param2"

]提供給entrypoint的預設引數。

注:指定啟動容器時執行的命令,每個dockerfile只能有一條cmd命令,如果指定了多條命令,只有最後一條會被執行。

如果使用者啟動容器時候指定了執行的命令,則會覆蓋掉cmd指定的命令。

expose

格式為expose 

[...]。

例如, expose 22 80 8443

告訴docker服務端容器暴露的埠號,供互聯系統使用。在啟動容器時需要通過-p,主機會自動分配乙個埠**到指定的埠,使用-p,則可以具體指定哪個本地埠對映過來。

env

格式為env 

指定乙個環境變數,會被後續run指令使用,並在容器執行時保持。例如
env pg_major 9.3

env pg_version 9.3.4

run curl -sl |

tar -xjc /usr/src/postgress &&

...env path /usr/local/postgres-$pg_major/bin:$path

add
格式為add 

該命令將複製指定的到容器中的。其中可以是dockerfile所在目錄的乙個相對路徑(檔案或目錄),也可以是乙個url,還可以是乙個tar檔案(自動解壓為目錄)。

copy

格式為copy 

複製本地主機的(為dockerfile所在目錄的相對路徑,檔案或目錄)為容器的。目標路徑不存在時,會自動建立。當使用本地目錄為源目錄時,推薦使用copy。

entrypoint

有兩種格式

entrypoint [

"executable", "param1", "param2"

]entrypoint command param1 param2(shell中執行)

配置容器啟動後執行的命令,並且不可被docker run提供的引數覆蓋。每個dockerfile只能有乙個entrypoint,最後乙個生效。

volume

格式為volume [

"/data"

]。

建立乙個可以從本地主機或其他容器掛載的掛載點,一般存放資料庫和需要保持的資料。

user

格式為user daemon

指定執行容器時的使用者名稱或者uid,後續的run也會使用指定使用者。

當服務不需要管理員許可權時,可以通過該命令指定執行使用者。並且可以在之前建立所需要的使用者,例如:run groupadd -r postgres &&

useradd -r -g postgres postgres。要臨時獲取管理員許可權可以使用gosu,而不推薦sudo。

workdir

格式為workdir /path/to/workdir。
為後續的run、cmd、entrypoint指令配置工作目錄。

可以使用多個workdir指令,後續命令如果引數是相對路徑,則會基於之前指定的路徑。例如:

workdir  /a

workdir b

workdir c

run pwd

最終路徑為/a/b/c。

onbuild

格式為onbuild [instruction]。
配置當前所建立的映象作為其他新建立映象的基礎映象時,所執行的操作指令。例如,dockerfile使用如下的內容建立了映象image-a。
[

...]

[...]

如果基於image-a建立新的映象時,新的dockerfile中使用from image-a指定基礎映象時,會自動執行onbuild指令內容,等價於在後面新增了兩條指令。
from image-a

#automatically run the following

使用onbuild指令的映象,推薦在標籤中註明,例如ruby:1.9-onbuild。

基本格式 docker build [選項] 路徑,該命令將讀取指定路徑下(包括子目錄)的dockerfile,並將該路徑下所有內容傳送給docker服務端,由服務端建立映象。因此一般建議放置dockerfile的目錄為空目錄。

Dockerfile基本結構

1.dockerfile是乙個文字格式的配置檔案,使用者可以使用dockerfile快速建立自定義的映象。2.dockerfile檔案分為四個部分 a.基礎映象資訊 在dockerfile中使用 完成一行的註解 第一行必須制定基礎映象 from centos b.維護者資訊 維護者資訊 mainta...

Dockerfile基本用法

docker 並不建議使用者通過commit方式構建映象。原因如下 用dockerfile構建映象,底層也docker commit 一層一層構建新映象的。1.執行docker build命令,t將新映象命名,末尾的.指名build context為當前目錄,從當前目錄下尋找dockerfile,也...

Dockerfile中的基本指令

dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。dockerfile僅僅是構建dock...