中級篇 Dockerfile詳解(17)

2021-09-11 14:44:39 字數 4876 閱讀 9634

一般的,dockerfile 分為四部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時執行指令。

官網學習
docs.docker.com/engine/refe…

from

必須為第乙個命令,指定基礎映象

from from :from @複製**
from scratch #製作base image

from centos #使用base image

from centos:7.9

from mysql:5.6

複製**

盡量使用官方的image作為base image!那是經得起考驗的!

label
給映象新增資訊。使用docker inspect可檢視映象的相關資訊

label maintainer="[email protected]"

label version="1.0"

label description="this is description \

複製**

其實就類似咱們寫**的注釋,很多人寫**不願意寫注釋,其實寫注釋對自己的負責,過段時間翻坑的時候,想想當初的意思,容易很快的解決,所以一定要寫label

run
構建映象時執行的命令

run yum update && yum install -y vim \

python-dev #反斜線換行

複製**

run  apt-get update && apt-get install -y perl \

pwgen --no-install-recommends && rm -rf \

/var/lib/apt/lists/* #注意清理cache

複製**

run  /bin/bash -c 'source $home/.bashrc;echo $home'

複製**

為了美觀,複雜的run請用反斜線換行,避免無用分層,合併多條命令成一行!

workdir
工作目錄

workdir /test

#如果沒有會自動建立test目錄

workdir jianshu

run pwd

#輸出結果應該是/test/jianshu

複製**

用workdir,不要用run cd 盡量使用絕對目錄!

add and copy
將本地檔案新增到容器中,identity, gzip, bzip2,xz,tar.gz,tgz等型別的檔案將被新增tar -x命令,進行解壓

同add,只是不會解壓檔案。

add ... add ["",... ""] 用於支援包含空格的路徑

copy ... copy ["",... ""] 用於支援包含空格的路徑

複製**

add hello /

add test.tar.gz / #新增到根目錄並解壓

workdir /root

add hello test/ # /root/test/hello

複製**

workdir /root

copy hello test/ # /root/test/hello

複製**

大部分情況,copy優於add,add除了copy還有額外功能(解壓縮)!新增遠端檔案/目錄請使用curl 或者wget

env
設定環境變數

env env =...

複製**

env mysql_version 5.6

e-nv apt-get install -y mysql-server = "$" \

&& rm -rf /var/lib/apt/lists/* #引用常亮

複製**

盡量多使用,減少維護成本!

學習下面的先了解下

shell 和exec 格式

run apt-get install -y vim

cmd echo

entrypoint echo

複製**

run ["apt-get", "install", " -y", "vim"]

複製**

from centos

env name docker

entrypoint echo

"hello $name"

複製**

from centos

env name docker

entrypoint ["/bin/echo", "hello $name"]

複製**

通過實際的例子檢視區別。

mkdir cmd-entrrypoint

cd cmd-entrrypoint/

vi dockerfile

複製**

more dockerfile

複製**

docker build -t liming/centos-entrypoint-shell .

複製**

docker run liming/centos-entrypoint-shell 

複製**

more dockerfile

複製**

docker build -t  liming/centos-entrypoint-exec .

複製**

docker run  liming/centos-entrypoint-exec

複製**

我們通過shell格式執行的話,它會通過預設的bash裡面通過shell執行命令,它會通過shell替換這邊變數,通過exec格式執行的話,只是單純的執行echo,沒辦法幫我們替換到$name。如何解決不一樣的問題呢?請開始我的表演!修改dockerfile2

from centos

env name docker

entrypoint ["/bin/bash","-c", "echo hello $name"]

複製**

docker build -t liming/centos-entrypoint-exec-new .

複製**

docker run liming/centos-entrypoint-exec-new

複製**

是不是很nice!

cmd
設定容器啟動後預設執行的命令和引數

from centos

env name docker

cmd echo

"hello $name"

複製**

docker build -t liming/centos-cmd-shell .

docker run liming/centos-cmd-shell

docker run -it liming/centos-cmd-shell /bin/bash

複製**

entrtypoint

設定容器啟動時執行的命令

from centos

env name docker

entrypoint echo

"hello $name"

複製**

docker build -t liming/centos-entrypoint-shell .

docker run liming/centos-entrypoint-shell

docker run -it liming/centos-entrypoint-shell /bin/bash

複製**

個人**:it人故事會 idig8.com

ps:dockerfile詳解基本就介紹這麼多,可能還有很多命令沒有講解,以後用到了在說吧。一定要cmd和entrtypoint因為很多官方的都常用這兩個命令。

Dockerfile 指令詳解

一種通過commit的方式 把做了一系列操作的容器關閉,然後利用docker的commit指令 dockercommit 容器id 映象名 tag。然後dockerpush到映象倉庫。別人pull下來的再次啟動的時候,就是你當前的操作的形態。另一種是通過dockerfile構建的方式 把操作的步驟通...

Dockerfile檔案詳解

一 dockerfile檔案 二 配置檔案詳解 1.from centos 我們的docker是基於哪個基礎映象的 我們的工作目錄 3.copy metadata metadata 將本地的專案拷貝到docker內部 4,run命令 在docker內部執行一下命令,可以是安裝軟體,新建資料夾等操作 ...

DockerFile命令詳解

form 基礎映象,當前新映象是基於哪個映象的,例如我要建立乙個centos的映象,我要拉取父映象 from centos maintainer 映象的作者,一般是姓名 郵箱位址 run 容器構建時執行的命令 expose 暴露新建的映象對外服務的埠號 workdir 建立容器後的工作目錄,如果沒有...