基于Kubernetes的容器云平臺實戰》——1.5 Docker安裝">《基于Kubernetes的容器云平臺實戰》——1.5 Docker安裝
795
2025-04-02
2.2 容器生命周期管理
容器生命周期管理是Docker引擎的核心功能,既包括對容器元數據的操作管理,也涵蓋了對操作系統API的包裝調用。這部分功能是由引擎守護程序、Containerd和標準化的運行時工具配合完成的,具體的命令有:run、create、start、rename、update、pause、unpause、stop、kill、restart、rm、prune、wait等。
1.運行容器
docker container run [options] image[:tag|@digest] [cmd] [arg...]
該命令用于啟動容器進程,等于create和start的組合。當命令無選項時,容器以鏡像模板加默認屬性的方式創建。下面對docker container run命令的主要選項分別進行介紹。
(1)基本選項
--name指定容器名字。如不指定,引擎將隨機分配一個。-d/--detach(默認模式),以后臺模式運行,容器標準輸出和錯誤流被送到日志驅動。容器結束或退出后不會從文件系統中刪除,除非帶有--rm,它才會被自動清除(附帶清除匿名卷)。-i/--interactive則將容器標準流都關聯到當前終端(-a指定關聯其中的幾個),-t為容器分配偽終端,--sig-proxy=false關閉鍵盤輸入系統信號(比如Ctrl-C)的轉發功能。如容器從管道得到標準輸入時,不能帶-t選項。--cidfile,指示引擎將創建的容器的ID寫入指定文件中。
--init指定容器中PID為1的進程,負責回收僵尸進程,正確處理系統信號,該選項不加參數時,使用引擎自帶的docker-init可執行程序。
--restart定義退出重啟策略,默認no不重啟。on-failure[:max-retries]表示返回碼不為0時且重啟次數在限定范圍內,則執行重啟。always,在容器退出以及引擎啟動時重啟。unless-stopped,只在退出時重啟。重啟延遲時間從100ms開始逐次加倍,最長時間1min,啟動后10s重置。重啟次數記錄在元數據中,可用inspect查看。--stop-signal,定制停止容器時發送的默認SIGTERM信號。--stop-timeout,定制默認10s停止容器超時時間。
--log-driver為容器指定與當前引擎不同的日志驅動。默認驅動是json-file,可選值有none、syslog、journald、gelf、fluentd、awslogs和splunk。配合--log-opt選項為具體驅動配置運行參數。
(2)用于覆蓋image創建時默認配置的選項
該命令行上的cmd和參數能夠覆蓋Dockerfile里的CMD指令,而--entrypoint選項值能夠覆蓋Dockerfile中的ENTRYPOINT指令值。
Dockerfile中有端口映射,--expose=[],表示補充新的暴露端口;-p=[],覆蓋端口映射規則。它們的參數格式為ip:hPort:cPort | ip::cPort | hPort:cPort | cPort,其中主機hPort和容器cPort都可以是范圍值,能帶TCP/UDP限定協議。-P表示暴露全部。
--env/-e為補充設置環境變量,--env-file為從文件中讀取補充的環境變量。-w/--workdir,覆蓋WORKDIR指令。-l/--label,補充元數據標簽。--label-file,從文件中讀取補充的元數據標簽。
-v/--volume將宿主機路徑和預定義卷綁定掛載到容器中的絕對路徑,格式為[src:]dest[:
-u/--user設置容器進程UID和GID,可為用戶名或ID,如用ID則容器中可無此用戶。格式為:user | user:group | uid | uid:gid | user:gid | uid:group。
(3)與健康檢查相關的選項
--health-cmd,覆蓋鏡像定義時健康檢查配置,以exec方式周期執行容器中命令,返回0判定為健康。--health-start-period,在容器啟動時設定的容忍間隔,避免誤判。--health-interval,周期檢查間隔。--health-retries,返回碼不為0時的重試次數。--health-timeout,檢查超時時間。--no-healthcheck,關閉健康檢查。
(4)與命名空間相關的選項
與命名空間相關的選項有:--uts、--pid、--ipc、--network和--userns。空串值表示默認創建私有命名空間,‘host’表示共享宿主機對應命名空間。
--pid、--ipc和--network可帶容器Name或ID以共享其命名空間,此時不能再設置獨立主機名和MAC地址等。--pids-limit設置PID命名空間最大pid數量。
--network還支持bridge(默認值,此時可用端口映射)和none,前者在私有空間中掛接虛擬網卡到全局網橋,后者則只有loopback。docker network create命令創建的網絡對象名字或ID也能用于此選項。
--dns=[]、--dns-search和--dns-option定制容器中/etc/resolv.conf內容、dns服務器列表和搜索選項。--add-host host:ip在容器里的/etc/host中添加localhost和已分配地址之外的映射。--mac-address指定網卡的MAC地址,否則將根據IP地址生成。--ip和--ip6指定網卡IPv4或IPv6地址,bridge模式下默認自動分配。--link-local-ip=[]指定網卡鏈路本地IPv4/IPv6地址。
(5)與安全相關的一些選項
--security-opt設置安全相關配置,值為key=value形式,可打開或關閉SELinux、apparmor、seccomp和new priviliages功能,可配置SELinux的label、seccomp的描述文件和apparmor的profile。--cap-add和--cap-drop為容器添加或刪除capabilities。ALL表示添加或刪除所有capabilities。其他key名字列在頁面http://man7.org/linux/man-pages/man7/capabilities.7.html上。
--privileged=true|false設置容器在宿主機上是否有特權,默認無。--device為容器添加設備文件,設備名字后面可帶“:rwm”這樣的描述以限定讀、寫和mknod能力。--device-cgroup-rule='c 42:* rmw'用于修改默認設備文件讀寫權限。對于容器進程執行時歸屬的補充組,可通過--group-add來添加。
有很多命令選項用于設置自定義的CGroups資源限制參數。
容器默認使用新建的CGroup節點,--cgroup-parent指定使用其他節點。
(6)與內存資源相關的選項
-m/--memory限制容器內存使用量,最小4MB,單位可以是b、k、m和g(對應B、KB、MB和GB)。--memory-swap限制容器內存加交換區使用總量,應比內存限制大。--memory-reservation設置使用量軟門限,應比-m硬門限小,以觸發內存回收。--kernel-memory設置內核內存使用量。--oom-kill-disable,設置是否對容器關閉oom killer。--oom-score-adj調整容器的OOM優先級。--memory-swappiness調整容器的匿名頁可交換比例,范圍為10~100。--shm-size設置掛載的/dev/shm大小,默認為64MB。
(7)與CPU資源相關的選項
-c/--cpu-shares設置CPU使用權重,默認為1024,各容器根據比例使用CPU。--cpu-period設置CFS模式下調度間隔,單位為微秒,默認為100ms。--cpu-quota指定CFS模式下每調度間隔中的限額,單位為微秒,與cpu-period配合使用。--cpus設置可用CPU數,可為小數,獲得cpu-period和cpu-quota配合使用時的相同效果,默認0為無限制。--cpuset-cpus限制容器可執行CPU核ID的集合。--cpuset-mems在NUMA系統上限制容器可用內存節點集合。--cpu-rt-period和--cpu-rt-runtime用微秒表示,上一級CGroup中須設置有此參數,且比此值大。
(8)與塊I/O資源相關的選項
--blkio-weight設置塊設備I/O權重,默認為500,取值范圍為10~1000。
--blkio-weight-device以設備名指定塊I/O權重,格式為
[
2.新建容器
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
該命令用于創建容器配置并返回ID,后續用start來啟動該容器。除-d、--detach和--sig-proxy幾個選項外,與run命令選項幾乎一樣。
3.啟動容器
docker container start [OPTIONS] CONTAINER [CONTAINER...]
該命令除了用于啟動已創建的容器配置之外,還用于恢復已保存檢查點(實驗性功能)。--interactive/-i,交互式執行。--attach/-a,掛接輸出/錯誤流,轉發信號。
4.更新容器配置
docker container update [OPTIONS] CONTAINER [CONTAINER...]
此命令更新容器CPU、內存、I/O資源限制和重啟策略。選項參考run命令:--blkio-weight、--cpu-period、--cpu-quota、--cpu-rt-period、-c/--cpu-shares、--cpu-rt-runtime、--cpus、--cpuset-cpus、--cpuset-mems、-m/--memory、--kernel-memory、--memory-reservation、--memory-swap和--restart。
5.重命名容器
docker container rename CONTAINER NEW_NAME
該命令用于重命名一個容器。被更名的容器可以處于運行、暫停或者終止狀態。
6.暫停/恢復容器
docker container pause CONTAINER [CONTAINER...]
docker container unpause CONTAINER [CONTAINER...]
在Linux下,使用CGroup的freezer子系統控制器來暫停或者恢復容器進程。
7.停止/重啟容器
docker container stop [OPTIONS] CONTAINER [CONTAINER...]
stop停止一個或多個容器。停止信號默認為SIGTERM,除非創建容器時指定,實際停止前默認等待10s(創建時可定制)。-t/--time指示等待時間。
docker container kill [OPTIONS] CONTAINER [CONTAINER...]
kill向容器主進程發送SIGKILL信號,或由-s/--signal選項給出的信號。
docker container restart [OPTIONS] CONTAINER [CONTAINER...]
restart用于先停止指定的一個或者多個容器,再啟動它們。
8.刪除容器
docker container rm [OPTIONS] CONTAINER [CONTAINER...]
該命令可以刪除一個或者多個指定的容器。如果容器處于運行狀態,必須使用-f/--force來強制刪除。-v/--volumes會刪除只與該容器關聯的匿名卷。
docker container prune [OPTIONS]
該命令刪除所有停止狀態的容器。-f/--force在刪除之前無提示。可使用--filter過濾需刪除的容器,過濾條件有until和label,用法與docker ps中的一樣。
9.等待容器運行結束
docker container wait CONTAINER [CONTAINER...]
使用這個命令以阻塞方式等待一個或者多個容器執行結束,并打印其返回碼。
Docker 容器 Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。