docker容器執行和資源限制

2021-08-14 14:47:48 字數 3031 閱讀 4934

docker學習筆記

如圖執行容器

容器執行完命令後就退出了。

容器的生命週期依賴於啟動時執行的命令,只要該命令不結束,容器也就不會退出。

可以通過加上引數-d以後臺方式啟動容器,如圖

container id 是容器的短id,前面啟動容器時返回的使長id。短id是長id的前12個字元。

names欄位顯示容器的名字,在啟動容器時可以通過–name引數顯示地為容器命名,如果不指定,docker會自動為容器分配名字。

我們經常需要進入到容器裡去做一些工作,比如檢視日誌、除錯、啟動其他程序等。有兩種方法進入容器:

1,docker attach

通過docker attach可以attach到容器啟動命令的終端

2,docker exec

通過docker exec進入相同的容器,-it指定以交模式開啟,執行exit退出容器,回到docker host

3,attach和exec的區別:

attach直接進入容器啟動命令的終端,不會啟動新的程序。

exec則是在容器中開啟新的終端,並且可以 啟動新的程序。

如果想直接在終端檢視啟動命令的輸出,用attach,其他情況使用exec。

如果只是為了檢視啟動命令的輸出,可以使用docker logs命令。

按用途容器大致可分為兩類:服務類容器和工具類容器。

服務類容器以daemon守護者程序的形式執行,對外提供服務,比如web server、資料庫等。通過-d以後臺方式啟動這類容器是非常合適的。如果要排查問題,可以通過exec -it進入容器。

工具類容器通常能給我們提供乙個臨時的工作環境,通過以run -it方式執行。

工具類容器多使用基礎映象,例如debian、ubuntu等。

通過docker stop可以停止執行的容器,容器在docker host中實際上是乙個程序,如果想快速停止容器,可使用docker kill命令。

對於處於停止狀態的容器,可以通過docker start重新啟動。

docker start會保留容器的第一次啟動的所有引數。即如果你是通過docker run -d以守護程序的形式啟動容器,你stop後start容器,容器還是會以守護程序的形式執行。

docker restart可以重啟容器,期作用就是依次執行docker stop和docker start。

容器可能會因某種錯誤而停止執行。對於服務類容器,我們通常希望在這種情況下容器能夠自動重啟。啟動容器時設定–restart就可以達到這個效果。

–restart=always,意味著無論容器因何種原因退出(包括正常退出),都立即重啟,該引數的形式還可以是–restart=on-failure:3,意思是如果啟動程序退出**非0,則重啟容器,最多重啟3次。

有時我們只是希望讓容器暫停工作一段時間,比如要對容器的檔案系統打個快照,或者docker host需要使用cpu,這是執行docker pause。

處於暫停狀態的容器不會占用cpu資源,直接通過docker unpause恢復執行。

使用docker一段時間後,host上可能會有大量已經退出了的容器(可以通過docker ps -a檢視正在執行或已經停止的容器),如圖

這些容器依然會占用host 的檔案系統,如果確認不會再重啟此類容器,可以通過docker rm刪除。

docker rm一次可以指定多個容器。

docker rm是刪除容器,docker rmi是刪除映象。

乙個docker host上會執行若干個容器,每個容器都需要cpu、記憶體和io資源。對於vmware等虛擬化技術,使用者可以控制分配多少cpu、記憶體資源給每個虛擬機器。對於容器,docker也提供了類似的機制避免某個容器因占用太多資源而影響其他容器乃至整個host的效能。

關於docker的記憶體限額、cpu限額可以使用progrium/stress映象來學習或測試,progrium/stress是專門用來做壓力測試的。

與作業系統類似,容器可使用的記憶體包括兩部分:物理記憶體和swap。docker通過下面兩組引數來控制記憶體的使用量。

-m 或 -memory:設定記憶體的使用限額,例如100mb,2gb。

-memory -swap:設定記憶體+swap的使用限額。

當我們執行如下命令:

其含義是允許該容器最多使用200mb的記憶體和100mb的swap。預設情況下,上面兩組引數為-1,即對容器記憶體和swap的使用沒有限制。

預設設定下,所有容器可以平等地使用host cpu資源並且沒有限制。

docker可以通過 -c 或 –cpu-shares 設定容器使用cpu的權重。如果不指定,預設值為1024。

與記憶體限額不同,通過 -c 設定的 cpu share 並不是cpu資源的絕對數量,而是乙個相對的權重值。某個容器最終能分配到cpu資源取決於它的cpu share佔所有容器cpu share總和的比例。

即通過cpu share可以設定容器使用cpu的優先順序。

block io 是另一種可以限制容器使用的資源。block io 指的是磁碟的讀寫,docker 可通過設定權重、限制 bps 和 iops 的方式控制容器讀寫磁碟的頻寬。

1,block io 權重

預設情況下,所有容器能平等地讀寫磁碟,可以通過設定 –blkio-weight 引數來改變容器 block io 的優先順序。

–blkio–weight 與 –cpu-shares 類似,設定的是相對權重值,預設為500。

2,限制 bps 和 iops

bps 是 byte per second ,每秒讀寫的資料量。

iops 是 io per second ,每秒 io 的次數。

可通過以下引數控制容器的 bps 和 iops:

《每天5分鐘 玩轉docker容器技術》

docker容器資源限制

docker啟動時可用針對記憶體和cpu進行資源限制 一 對記憶體進行限制 m 記憶體大小 docker run rm itd name jdk8 m 1024m primetoninc jdk 進行驗證 二 對cpu進行限制 指定容器中的程式執行在指定的cpu核心上 cpuset cpus 0 指...

docker容器進行資源限制

限制cpu docker run d name stress1 cpu shares 5 stress ubuntu docker run d name stress2 cpu shares 10 stress ubuntu 這裡的cpu shares為相對cpu資源,虛擬機器一共啟動兩個容器的話,...

docker容器的記憶體資源限制

docker資源限制和docker資源限制的型別 記憶體資源限制的原理和記憶體資源限制的選項 配置記憶體資源限制 預設情況docker沒有對容器進行資源限制 容器可以無限制從docker宿主機獲取計算機硬體資源 當docker宿主機硬體佔滿,linux核心探測報記憶體異常或者溢位,自動殺死占用系統資...