一般的,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 \
複製**
其實就類似咱們寫**的注釋,很多人寫**不願意寫注釋,其實寫注釋對自己的負責,過段時間翻坑的時候,想想當初的意思,容易很快的解決,所以一定要寫labelrun
構建映象時執行的命令
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 或者wgetenv
設定環境變數
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 建立容器後的工作目錄,如果沒有...