Docker筆記之Dockerfile
Docker通過Dockerfile包含所有命令文字檔案中讀取指令來按照指令順序構建給定影象。Docker映象由只讀層組成,這些層都是堆疊的,也就是說每一層都是前一層變化的增量。也就是說通過Dockerfile文字檔案的指令,來建立每一層。
0. 一個簡單的Dockerfile使用
先來說下docker build
docker build 根據Dockerfile檔案建立映象
命令格式:
docker build [OPTIONS] PATH | URL | -
Options:
--add-host 新增自定義主機到IP對映(主機:ip)
--build-arg 設定構建時變數
--cache-from 要考慮作為快取源的影象
--cgroup-parent 容器的可選父cgroup
--compress 使用gzip壓縮構建上下文
--cpu-period 限制CPU CFS(完全公平計劃程式)期間
--cpu-quota 限制CPU CFS(完全公平計劃程式)配額
-c --cpu-shares CPU份額(相對權重)
--cpuset-cpus 允許執行的CPU(0-3,0,1)
--cpuset-mems 允許執行的MEM(0-3,0,1)
--disable-content-trust 跳過影象驗證 預設為true
--file , -f Dockerfile的名稱(預設為'PATH / Dockerfile')
--force-rm 始終移除中間容器
--iidfile 將影象ID寫入檔案
--isolation 容器隔離技術
--label 設定影象的後設資料
-m --memory 記憶體限制
--memory-swap 交換限制等於記憶體加交換: - 1以啟用無限制交換
--network 在構建期間設定RUN指令的網路模式
--no-cache 構建映像時不要使用快取
--platform 如果伺服器具有多平臺功能,則設定平臺
--progress 設定進度輸出型別(auto,plain,tty)。使用plain顯示容器輸出,預設為True
--pull 始終嘗試拉出較新版本的影象
-q --quiet 成功時禁止構建輸出並列印影象ID
--rm 成功構建後刪除中間容器,預設為True
--secret 用於公開構建的祕密檔案(僅當啟用了BuildKit時):id = mysecret,src = / local / secret |
--security-opt 安全選項
--shm-size / dev / shm的大小
--squash 新構建的圖層壓縮到一個新圖層中
--ssh SSH代理套接字或公開給構建的鍵(僅當啟用了BuildKit時)(格式:default |<id style="box-sizing: border-box;">[=<socket style="box-sizing: border-box;">|<key style="box-sizing: border-box;">[,<key style="box-sizing: border-box;">]])</key></key></socket></id>
--stream Stream附加到伺服器以協商構建上下文
-t --tag 以“name:tag”格式命名和選擇標記
--target 設定要構建的目標構建階段。
--ulimit Ulimit選項
然後說下構建映象的流程
先從FORM
指定的映象(如果本地沒有,會自動從Docker Hub下載),建立一個容器,然後執行'RUN'指令後邊的內容,最後執行docker commit
命令,將容器提交為映象,最後刪除過程中建立的容器。
接著來看
通過圖片可以發現,
- 第一次執行,跟預想的一樣。
- 第二次執行
docker build
時,第二步沒有執行,顯示的時using cache
,Dockerfile2檔案與第一次執行時的差異是在RUN echo "測試行"
下一行新增了RUN echo "測試行下一行1
; - 第三次執行
docker build
時,跟預想的一樣,Dockerfile2檔案與第二次執行時的差異是在RUN echo "測試行"
上一行新增了RUN echo "測試行上一行"
;
可以發現:當Dockerfile檔案需要增加指令時,儘量在末尾新增。如果在FROM下新增,會引起不必要的資源消耗。如果記憶體中存在執行過的指令,指令執行是從修改行開始的。
1. Dockerfile編寫命令:檢視詳細
FROM: 指定基礎映象
RUN: 構建映象過程中需要執行的命令。可以有多條。
CMD:新增啟動容器時需要執行的命令。多條只有最後一條生效。可以在啟動容器時被覆蓋和修改。
ENTRYPOINT:同CMD,但這個一定會被執行,不會被覆蓋修改。
LABEL :為映象新增對應的資料。
MLABELAINTAINER:表明映象的作者。將被遺棄,被LABEL代替。
EXPOSE:設定對外暴露的埠。
ENV:設定執行命令時的環境變數,並且在構建完成後,仍然生效
ARG:設定只在構建過程中使用的環境變數,構建完成後,將消失
ADD:將本地檔案或目錄拷貝到映象的檔案系統中。能解壓特定格式檔案,能將URL作為要拷貝的檔案
COPY:將本地檔案或目錄拷貝到映象的檔案系統中。
VOLUME:新增資料卷
USER:指定以哪個使用者的名義執行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:設定工作目錄
ONBUILD:如果製作的映象被另一個Dockerfile使用,將在那裡被執行Docekrfile命令
STOPSIGNAL:設定容器退出時發出的關閉訊號。
HEALTHCHECK:設定容器狀態檢查。
SHELL:更改執行shell命令的程式。Linux的預設shell是[“/bin/sh”, “-c”],Windows的是[“cmd”, “/S”, “/C”]。
注:Dockerfile編寫還得多練!
相關文章
- docker筆記14-Dockerfile案例-自定義mycentosDocker筆記CentOS
- docker筆記15-Dockerfile案例-CMD、ENTRYPOINT案例Docker筆記
- docker筆記16-Dockerfile案例-ONBUILD命令案例Docker筆記UI
- Dockerfile筆記Docker筆記
- docker 筆記3 dockerfile語法及最佳實踐Docker筆記
- docker筆記17-Dockerfile案例-自定義tomcat映象Docker筆記Tomcat
- Docker 映象構建之 DockerfileDocker
- Docker學習筆記(三):Dockerfile及多步驟構建映象Docker筆記
- Docker筆記之Docker初體驗Docker筆記
- Docker筆記之七:RegistryDocker筆記
- Docker筆記二之容器Docker筆記
- Docker筆記一之映象Docker筆記
- Dockerfile 小記之FROMDocker
- Docker 學習筆記(第六集:使用 Dockerfile 定製映象)Docker筆記
- Docker筆記五之Docker系統變數Docker筆記變數
- 筆記:使用Dockerfile構建映象筆記Docker
- docker 學習筆記之實戰 lnmp 環境搭建系列 (3) ------ dockerfile 定製屬於自己的映象Docker筆記LNMP
- Docker筆記四之執行MySQLDocker筆記MySql
- 小白學Docker(九) Docker DockerfileDocker
- Dockerfile小記之ARG和ENVDocker
- Docker的Dockerfile指令Docker
- Docker_07 DockerfileDocker
- Docker 入門:DockerfileDocker
- Docker學習—DockerFileDocker
- docker 筆記Docker筆記
- 筆記:Docker筆記Docker
- Docker筆記Docker筆記
- Docker筆記三之執行Django系統Docker筆記Django
- Docker--DockerFile與映象Docker
- docker容器dockerfile詳解Docker
- Docker映象中提取DockerfileDocker
- 【Docker】動手寫Dockerfile學習DockerDocker
- Docker, Dockerfile, 和Docker Compose區別 | BaeldungDocker
- docker 筆記2Docker筆記
- docker 筆記4Docker筆記
- Docker Stack 筆記Docker筆記
- docker筆記(一)Docker筆記
- docker使用筆記Docker筆記