基于Kubernetes的容器云平臺實戰》——2.2 容器生命周期管理

      網友投稿 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[:]。其中,src為宿主機路徑或卷名稱,無此項使用匿名卷;opts可帶逗號分隔的多個屬性,指定只讀或讀寫掛載模式、源和目標之間的掛載傳播屬性、SELinux安全標簽是否修改,以及掛載命名卷時dest原有文件是否復制,格式為[rw|ro]、[[r]shared|[r]slave|[r]private]、[z|Z]和[nocopy]。與此相關的選項還有--volume-driver,表示使用專門的卷驅動;--volumes-from,指從指定容器掛載全部卷對象;--read-only,表示以只讀方式掛載根文件系統。--tmpfs=[],掛載指定的tmpfs,格式參照mount -t tmpfs -o命令。

      -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權重,格式為:。--device-read-bps設置對具體設備讀操作的限速值,格式為:

      [],單位為KB、MB或GB。--device-write-bps設置對具體設備寫操作的限速值,格式如前。--device-read-iops設置對具體設備每秒讀次數的門限,格式為:。--device-write-iops設置對具體設備每秒寫次數的門限,格式如前。

      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]

      《基于Kubernetes的容器云平臺實戰》——2.2 容器生命周期管理

      該命令刪除所有停止狀態的容器。-f/--force在刪除之前無提示。可使用--filter過濾需刪除的容器,過濾條件有until和label,用法與docker ps中的一樣。

      9.等待容器運行結束

      docker container wait CONTAINER [CONTAINER...]

      使用這個命令以阻塞方式等待一個或者多個容器執行結束,并打印其返回碼。

      Docker 容器 Kubernetes

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:五個冷門小技巧,效果都挺好
      下一篇:如何在wps表格中設置單元格背景顏色(wps怎么設置表格顏色背景)
      相關文章
      精品亚洲AV无码一区二区三区| 亚洲宅男永久在线| 亚洲欧洲国产视频| 亚洲制服中文字幕第一区| 亚洲日韩欧洲乱码AV夜夜摸 | 亚洲综合一区二区国产精品| 人人狠狠综合久久亚洲婷婷| 亚洲色成人WWW永久网站| 国产性爱在线观看亚洲黄色一级片| 在线观看亚洲网站| 久久精品国产亚洲AV未满十八| 亚洲国产欧洲综合997久久| 亚洲色偷偷综合亚洲av78| 亚洲色大成网站www| 亚洲欧美日韩中文字幕在线一区| 亚洲一本一道一区二区三区| 亚洲中文字幕久久久一区| 亚洲伦理一二三四| 亚洲一区无码中文字幕乱码| 亚洲人6666成人观看| 亚洲乱码在线观看| 亚洲熟妇AV一区二区三区浪潮| 亚洲精品女同中文字幕| 综合一区自拍亚洲综合图区| 丁香亚洲综合五月天婷婷| 亚洲精品视频在线看| 亚洲色无码一区二区三区| 亚洲高清国产AV拍精品青青草原| 久久亚洲国产精品| 久久精品国产亚洲av高清漫画| 亚洲特级aaaaaa毛片| 中文有码亚洲制服av片| 亚洲JLZZJLZZ少妇| 亚洲国产婷婷综合在线精品 | 亚洲乱码国产一区网址| 中文字幕亚洲专区| 亚洲va久久久噜噜噜久久天堂| 亚洲欧洲日韩不卡| 亚洲午夜久久久久久尤物| 亚洲精品无码久久久久YW| 亚洲国产精品人人做人人爱|