Dockerfile定製映象

2022-05-02 17:39:09 字數 2862 閱讀 4624

映象定製實質就是定製每一層所新增的配置、檔案。

dockerfile就是乙個指令碼來構建和定製映象,把每一層的修改、安裝、構建、操作都寫入指令碼。以此來解決體積、映象構建透明等問題。

dockerfile是乙個文字檔案,包含一條條指令(instruction),每一條指令構建一層,每一條指令的內容,就是描述該層應當如何構建。

[root@kwephicprc03547 home]# mkdir docker_nginx # 建立空白目錄

[root@kwephicprc03547 home]# cd docker_nginx/

[root@kwephicprc03547 docker_nginx]# touch dockerfile # 建立命名為dockerfile的檔案

from nginx

run

echo

'' > /usr/share/nginx/html/index.html

[root@kwephicprc03547 docker_nginx]# pwd

/home/docker_nginx # 在dockerfile檔案所在目錄執行

[root@kwephicprc03547 docker_nginx]# docker build -t nginx:v3 .

sending build context to docker daemon

2.048kb

step

1/2 : from nginx --->9235bd14ba8c

step

2/2 : run echo

'' > /usr/share/nginx/html/index.html ---> running in

147db19a597e # 啟動了乙個容器,並執行所要求的命令

removing intermediate container 147db19a597e # 刪除容器

--->f100fe2e6ea9 # 提交了這一層

f100fe2e6ea9successfully built f100fe2e6ea9

successfully tagged nginx:v3

docker build命令進行映象構建,格式為:

docker build [選項] 《上下文路徑/url/->

-t:指定了最終映象的名稱 nginx:v3。

定製映象一定是以某個映象為基礎,基於它進行定製。

from就是指定基礎映象,dockerfile中from是必備指令,且必須是第乙個指令。

docker hub有非常多的高質量官方映象,主要分為三類:

1)服務類映象:可以直接拿來使用,如nginx、redis、http等。

2)開發語言映象:方便開發、構建、執行各種語言應用,如node、python等。

3)作業系統映象:更為基礎更方便擴充套件,如centos、ubuntu等。

scratch是docker中的乙個特殊映象。這個映象是虛擬的概念,並不實際存在,表示乙個空白的映象

如果以scratch為基礎映象,意味著不以任何映象為基礎,所寫指令將作為第一層開始存在。

from scratch

使用 go 語言 開發的應用很多會使用這種方式來製作映象,這也是為什麼有人認為 go 是特別適合容器微服務架構的語言的原因之一。

run 指令是用來執行命令列命令的。run指令在定製映象時是最常用的指令之一。

(1)shell格式

run 《命令》,就像直接在命令列輸入命令一樣。

run echo

'' > /usr/share/nginx/html/index.html

(2)exec格式

run ["可執行檔案", "引數1", "引數2"],更類似函式呼叫的格式。

(3)層數限制和指令寫法

union fs有最大層數限制,如aufs之前最大不得超過42層,現在是不得超過127層。

每一條run行為都將新建一層,執行命令後,commit這一層的修改,構成新的映象。

from debian:stretch

run builddeps='

gcc libc6-dev make wget'\

&& apt-get update \

&& apt-get install -y $builddeps \

&& wget -o redis.tar.gz "

"\ && mkdir -p /usr/src/redis \

&& tar -xzf redis.tar.gz -c /usr/src/redis --strip-components=1

\ && make -c /usr/src/redis \

&& make -c /usr/src/redis install

\ && rm -rf /var/lib/apt/lists/*

\ && rm redis.tar.gz \

&& rm -r /usr/src/redis \

&& apt-get purge -y --auto-remove $builddeps

所有這些命令的目的只有乙個:編譯安裝redis。因此只需要建立一層即可。使用 && 將各個所需命令串聯起來。  

dockerfile支援在行尾新增 \ 來實現命令換行;也支援行首 # 來實現注釋。

Dockerfile 定製映象

docker 是乙個文字檔案,包含一條條指令 以構建nginx映象為例,這次我們用docker去構建定製映象 建立目錄並建立dockerfile mkdir mynginx cd mynginx touch dockerfile其內容有 from nginx run echo usr share n...

用Dockerfile定製映象

從剛才的 docker commit 的學習中,我們可以了解到,映象的定製實際上就是定製每一層所新增的配置 檔案。如果我們可以把每一層修改 安裝 構建 操作的命令都寫入乙個指令碼,用這個指令碼來構建 定製映象,那麼之前提及的無法重複的問題 映象構建透明性的問題 體積的問題就都會解決。這個指令碼就是 ...

dockerfile建立映象

dockerfile用來快速建立自定義映象 dockerfile分為部分 基礎映象資訊,維護者資訊,映象操作指令,容器啟動時執行指令 一開始必須指明所基於的映象名稱 維護者資訊 映象操作指令 run 執行容器時的操作命令 cmd from 功能為指定基礎映象,並且必須是第一條指令。如果不以任何映象為...