網站首頁 編程語言 正文
Docker 容器通常是缺乏內部狀態的臨時應用程序實例。這是處理它們的最佳實踐方法,可讓您隨時停止或重新啟動容器。
但有時對容器文件系統的修改是不可避免的。也許您正在試用軟件并希望稍后返回快照。另一個用例可能是容器內的軟件停止工作并且您希望保存一個副本以供將來調試的情況。
以下是如何從現有容器創建新的 Docker 映像。然后,您將能夠從該映像啟動另一個容器,該容器將填充第一個容器的文件系統。
提交容器
該docker commit命令用于獲取容器并從中生成新圖像。它適用于已停止或正在運行的容器。
基本語法如下:
docker commit example-container example-image:latest
這會從名為 的容器中創建一個圖像example-container。如果您愿意,還可以通過 ID 識別容器。這兩條信息都可以從docker ps列出主機上所有容器的輸出中獲得。
生成的圖像被分配作為命令的第二個參數給出的標簽。這example-image:latest在上面顯示的示例中。就像常規的圖像標記操作一樣,如果新圖像已經存在,它將替換標記的引用。
現在你可以使用你的鏡像將文件系統從example-container一個新的容器實例中恢復:
docker run -d example-image:latest
文件系統內容將在命令執行example-container時與容器匹配有一個重要的警告:安裝卷的內容將不包括在內,因此它們的安裝位置在創建的容器映像中將是空的。要運行具有完整卷數據的新容器,請在使用啟動第二個實例時使用標志從第一個容器重新附加卷。docker commit-vdocker run
另一個值得注意的癥結是 Docker 如何處理正在運行的容器的提交。在大多數情況下,這應該可以無縫地工作,但它默認在創建提交之前暫停目標容器。鏡像創建完成后容器內的所有進程都會暫停,然后再恢復。這提高了新映像中的數據一致性,但暫時無法訪問容器。–pause false您可以通過包含在您的docker commit命令中來禁用此行為。
添加提交消息
該docker commit命令以與 Git 等版本控制軟件類似的方式支持提交消息。從容器創建映像時添加消息可讓您記錄更改的內容以及提交背后的原因。
使用–messageor-m標志來應用提交消息:
docker commit -m "Example commit" example-container example-image:latest
您也可以使用專用標志添加作者信息。將通用First Name email@example.com格式的字符串提供給–authoror-a標志。它將與提交消息一起保存。
docker commit -a "Example Author <example@example.com>" -m "Example commit" example-container example-image:latest
docker history當您使用該命令查看圖像中的圖層時,會顯示提交消息。它們將顯示在COMMENT最右側的列中。
訪問此信息的另一種方法是與從圖像的 JSON 表示中提取作者身份和評論值docker inspect一起使用:grep
docker inspect <image-id> | grep 'Created\|Author\|Comment'
更改 Dockerfile 指令
提交一個鏡像讓你有機會改變它的一些 Dockerfile 指令。您可以在新圖像中覆蓋以下值:
- CMD
- ENTRYPOINT
- ENV
- EXPOSE
- LABEL
- ONBUILD
- USER
- VOLUME
- WORKDIR
要設置指令,請使用–changeor-c標志:
docker commit --change 'ENTRYPOINT ["sh"]' example-container example-image:latest
您可以根據需要多次重復該標志以應用所有預期的更改。
僅支持影響最頂層文件系統層的指令。您無法通過 和 等指令無縫擴展已提交的圖像與新RUN層COPY。但是,如果需要,您可以獲取提交的結果并編寫一個新的 Dockerfile 來添加新內容:
# Created via `docker commit` FROM example-image:latest RUN apt install example-package
如果您確實在提交時更改了 Dockerfile 指令,則值得添加一條提交消息來解釋您正在修改的內容以及原因。這將幫助任何其他有權訪問圖像的人了解與創建圖像的容器相比的任何行為差異。
概括
Docker 鏡像通常由 Dockerfiles 構建并用于啟動一次性容器。對容器文件系統狀態的更改是通過重建鏡像、銷毀現有容器和啟動新容器來實現的。在理想世界中,容器沒有任何內部狀態,但在實踐中并非總是如此。
提交容器為您提供了一種在未來恢復其當前文件系統的方法。提交對于創建麻煩容器的副本很有用,因此您可以在單獨的環境中進行調試,同時保持對先前生成的日志和臨時文件的訪問。
盡管容器提交通常感覺類似于 VM 快照,但它們并不完全相同。VM 控制虛擬硬件,并且該硬件的狀態將出現在快照中。Docker 容器只是主機上運行的一組進程;提交是一個新的 Docker 映像,它代表容器的文件系統,但必然缺少有關進程、內核和硬件狀態的任何數據。
原文鏈接:https://blog.csdn.net/wlcs_6305/article/details/122882981
- 上一篇:C++中拷貝構造函數的使用_C 語言
- 下一篇:詳解C語言的mem系列函數_C 語言
相關推薦
- 2022-10-29 node-sass安裝失敗解決方法
- 2022-05-08 jquery實現淘寶詳情頁選擇套餐_jquery
- 2022-09-30 QT設計秒表功能(跑步計時器)_C 語言
- 2022-04-25 Python實現實時增量數據加載工具的解決方案_python
- 2022-06-02 深入解析Apache?Hudi內核文件標記機制_服務器其它
- 2022-09-30 C#?wpf?Canvas中實現控件拖動調整大小的示例_C#教程
- 2022-07-28 C++超詳細講解函數重載_C 語言
- 2022-12-02 Jetpack?Compose自定義動畫與Animatable詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支