1. Docker鏡像操作常用指令有哪些
docker version:查看docker版本;
docker info:查看docker詳細信息;
docker --help:查看docker命令;
鏡像命令
docker images:列出本地主機上的鏡像,REPOSITORY:表示鏡像的倉庫源;TAG:鏡像的標簽;IMAGE
ID:鏡像ID;CREATED:鏡像創建時間;SIZE :鏡像大小,同一個倉庫源可以有多個TAG,可以表示倉庫源的不同版本,使用REPOSITORY:TAG來定義不同的鏡像;
docker images -a:列出本地所有的鏡像;
docker images -p:只顯示鏡像ID;
docker images --digests:顯示鏡像的摘要信息;
docker images --no-trunc:顯示完整的鏡像信息;
docker search tomcat:從Docker Hub上查找tomcat鏡像;
容器命令
docker run [OPTIONS] IMAGE:根據鏡像新建並啟動容器,IMAGE是鏡像ID或鏡像名稱;
docker ps:列出當前所有正在運行的容器;
exit:退出並停止容器;
docker start 容器ID或容器名稱:啟動容器;
docker restart 容器ID或容器名稱:重新啟動容器;
docker stop 容器ID或容器名稱:停止容器;
docker kill 容器ID或容器名稱:強制停止容器;
docker rm 容器ID或容器名稱:刪除容器;
docker rm -f $(docker ps -a -q):刪除多個容器。
2. 06-Docker資源限制
默認情況下,容器沒有資源限制,可以使用主機內核調度程序允許的盡可能多的給定資源,Docker 提供了控制容器可以限制容器使用多少內存或CPU 的方法,設置 docker run 命令的運行時配置標志。
其中許多功能都要求宿主機的內核支持linux 功能,要檢查支持,可以使用 docker info 命令,如果內核中禁用了某項功能,可能會在輸出結尾處看到警告,如下所示:
對於Linux 主機,如果沒有足夠的內存來執行其他重要的系統任務,將會拋出OOM (Out of Memory Exception,內存溢出、內存泄漏、內存異常), 隨後系統會開始殺死進程以釋放內存,凡是運行在宿主機的進程都有可能被kill,包括Dockerd和其它的應用程序,如果重要的系統進程被Kill,會導致和該進程相關的服務全部宕機。
linux 會為每個進程算一個分數,最終它會將分數最高的進程kill。
Docker 可以強制執行硬性內存限制,即只允許容器使用給定的內存大小。
Docker 也可以執行非硬性內存限制,即容器可以使用盡可能多的內存,除非內核檢測到主機上的內存不夠用了。
這些選項中的大多數採用正整數,後跟 b、k、m、g 後綴,螞姿棚以表示位元組、千位元組、兆位元組或千兆位元組。
--memory-swap , 只有在設置了 --memory 後才會有意義。使用Swap,可以讓容器將超出限制部分的內存置換到磁碟上,
不同悶則的 --memory-swap 設置會產生不同的效果:
假如一個容器未做內存使用限制,則該容器可以利用到系統內存最大空間,默認創建的容器沒有做內存資源冊散限制。
啟動兩個工作進程,每個工作進程最大允許使用內存256M,且宿主機不限制當前容器最大內存:
接著宿主機限制容器最大內存使用:
宿主機cgroup 驗證:
--memory-reservation
宿主機cgroup 驗證:
一個宿主機,有幾十個核的CPU,但是宿主機上可以同時運行成百上千個不同的進程用以處理不同的任務,多進程共用一個CPU 的核心依賴計數就是為可壓縮資源,即一個核心的CPU 可以通過調度而運行多個進程,但是同一個單位時間內只能有一個進程在CPU 上運行,那麼這么多的進程怎麼在CPU 上執行和調度的呢?
Linux kernel 進程的調度基於CFS(Completely Fair Scheler),完全公平調度
默認情況下,每個容器對主機CPU 周期的訪問許可權是不受限制的,但是我們可以設置各種約束來限制給定容器訪問主機的CPU周期,大多數用戶使用的是默認的CFS 調度方式,在Docker 1.13 及更高版本中,還可以配置實時優先順序。
參數 :
對於一台2核的伺服器,如果不做限制,容器會把宿主機的CPU 全部占完:
在宿主機使用 dokcer stats 命令查看容器運行狀態:
在宿主機查看CPU 限制參數:
宿主機CPU 利用率:
只給容器分配最多1核宿主機CPU 利用率
宿主機cgroup 驗證:
當前容器狀態:
宿主機CPU利用率:
容器運行狀態:
宿主機CPU利用率:
啟動兩個容器,stress1 的 --cpu-shares 值為1000 , stress2 的 --cpu-shares 為500,觀察最終效果, --cpu-shares 值為1000 的 stress1的CPU 利用率基本是 --cpu-shares 為500 的 stress1的 2 倍:
驗證容器運行狀態:
宿主機cgroups驗證:
動態修改CPU shares的值
--cpu-shares 的值可以在宿主機cgroup 動態修改,修改完成後立即生效,其值可以調大也可以減小。
驗證修改後的容器運行狀態: