dockerfile構建映象

2021-09-16 12:44:54 字數 3110 閱讀 5568

尋找官方映象的dockerfile:在hub.docker.com **中,輸入映象的名字,往下拉就能找到跳轉到dockerfile的鏈結。下圖是centos的dockerfile:

from scratch

maintainer the centos project add c68-docker.tar.xz /

label name="centos base image" \

vendor="centos" \

license="gplv2" \

build-date="2016-06-02"

# default command

cmd ["/bin/bash"]

from:**的基礎映象。最基本的基礎映象就是 scratch。

maintainer:作者+郵箱。

cmd:進入容器後自動執行的命令。docker run某些映象之後,直接會進入容器,那就是新增了這個/bin/bash 的結果。

dockerfile的解析過程:

1、每條保留字指令都必須大寫,而且後面要跟隨至少乙個引數。

2、指令從上到下順序執行。

3、#表示注釋

4、每個指令都會建立乙個新的映象層,並對映象進行提交。

docker執行dockerfile的大致流程:

1、docker從基礎映象執行乙個容器。

2、執行一條指令並對容器做出修改

3、執行類似 docker commit 的操作提交乙個新的映象層。

4、docker再基於剛提交的映象又執行乙個容器。

4、執行dockerfile中的下一條命令直到完成。

dockerfile面向開發。

docker 映象成為交付標準。

from:基礎映象

maintainer作者+郵箱

run:容器構建時需要執行的命令

expose:當前容器對外暴露出的埠號

workdir:指定在建立容器之後,終端登入進容器所在的預設目錄

env:在構建映象過程中設定環境變數。這個變數可以在後續的run命令中使用

copy:可以把乙個tar包拷貝進映象中

add:相比於copy,add還會把tar包解壓縮。

volume:容器資料卷,用於資料儲存和持久化工作

cmd:指定乙個容器啟動時要執行的命令。

entrypoint:指定乙個容器啟動時候要執行的命令。

onbuild:只要子映象繼承了父映象,那麼父映象就會執行這些命令

dockerfile構建映象

1、編寫dockerfile

from centos

maintainer yang [email protected]

env my_path /tmp

workdir $my_path

run yum -y install vim

run yum -y install net-tools

expose 80

cmd echo $my_path

cmd echo "success ----ok"

cmd /bin/bash

2、構建

docker build -f /root/dockerfile -t image_name:1.2 .

-f :dockerfile的絕對路徑。如果不寫,就會在環境變數中去找。

-t:是tag的意思,給這個映象新增乙個標籤。

最後邊有乙個點號, 代表當前目錄

cmd和entrypoint的區別

from centos

run yum -y install curl

entrypoint [「curl」,"-s",「

用上邊的dockerfile生成的映象image_name,在docker run的時候這樣寫。docker run image_name -i ,那麼就會把這個i當做entrypoint後邊命令的引數傳進去,真正執行的命令是 curl -is

如果使用cmd寫的話,那麼只會執行 -i。因為cmd是命令替換。

curl的-i選項是顯示http的header資訊。

onbuild

如果在父映象中新增以下:

onbuild run echo 「father is here …」

那麼當乙個dockerfile繼承這個映象的話,那麼在用這個dockerfile來build構建的話,就會執行乙個trigger(觸發器),在父映象中執行上邊的命令。

執行映象

docker run的引數:

-p:指定埠,形式為:主機埠:docker容器埠

-p:隨機分配埠。

-i:interactive,互動。

-t:終端,terminal。

啟動mysql容器:

docker run

-p 12345:3306

–name mysql

-v /root/mysql/conf:/etc/mysql/conf.d 把主機/root/mysql目錄下的conf/my.cnf 掛載到容器的/etc/mysql/conf.d

-v /root/mysql/logs:/logs

-v /root/mysql/data:/var/lib/mysql

-e mysql_root_password=123456 初始化root使用者的密碼

-d mysql 後台執行程式mysql。daemon

進入mysql容器:

docker exec -it ontainer_id /bin/bash

進去之後,mysql -uroot -p123456 就能連線上mysql了。然後進行後續的操作。

Dockerfile構建映象

docker映象是由 件系統疊加 成的,系統的最底層是 bootfs,相當於就是linux核心的引導 件系統 接下來第 層是rootfs,這 層可以是 種或多種操 作系統 如debian或ubuntu 件系統 docker中的rootfs是唯讀狀態的 docker利 聯合掛載技 術將各層 件系統疊加...

Dockerfile構建映象

mkdir dockerfile3 cd dockerfile3 touch dockerfile 在這個例子裡,我們通過run指令更新了已經安裝的apt倉庫,安裝了nginx包。之後將 hi,i am in your container 寫入 var www html index.nginx de...

Dockerfile構建本地映象

首先先建立乙個centos容器 docker create centos cenos6 刪除乙個容器。a005304e4e74 映象id f 引數是強制刪除,有時有依賴會無法刪除 docker rmi f a005304e4e74 檢視當前容器 docker images 如果有如下資訊 則建立映象...