欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker如何安全地停止和刪除容器

 更新時(shí)間:2022年09月26日 15:04:56   作者:Albert?Edison  
這篇文章主要介紹了Docker如何安全地停止和刪除容器,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

 前言

上一篇文章講了容器的運(yùn)行啟動(dòng):【Docker 那些事兒】如何安全地進(jìn)入到容器內(nèi)部

本篇文章將繼續(xù)承接上一篇,講講如何 停止、刪除容器對(duì)容器進(jìn)行資源限制

1. 停止和刪除容器

?? 停止容器

在工作中,有時(shí)會(huì)需要將容器暫停,例如,要為容器文件系統(tǒng)做一個(gè)快照時(shí)。使用 docker pausedocker unpause 命令可以對(duì)容器進(jìn)行暫停與激活操作,并且暫停狀態(tài)的容器不會(huì)占用宿主機(jī) CPU 資源。

當(dāng)不再需要業(yè)務(wù)運(yùn)行時(shí),就要將容器關(guān)閉,這時(shí)可以使用 docker stop 命令。當(dāng)遇到特殊情況而無(wú)法關(guān)閉容器時(shí),還可以使用 docker kill 命令強(qiáng)制終止容器,

示例代碼如下:

以上示例使用 docker kill 命令強(qiáng)制終止了容器。

企業(yè)中通常有大量的容器需要操作,一個(gè)一個(gè)操作會(huì)浪費(fèi)大量的人力及時(shí)間成本。在這種情況下,可以將 Docker 命令與正則表達(dá)式結(jié)合起來(lái),實(shí)現(xiàn)對(duì)容器的批量操作。

首先查看運(yùn)行狀態(tài)容器的 ID 號(hào),示例代碼如下:

接著使用 正則表達(dá)式 根據(jù)運(yùn)行狀態(tài)容器的 ID 號(hào)關(guān)閉正在運(yùn)行的容器,示例代碼如下:

以上示例運(yùn)用 docker stop 命令與正則表達(dá)式批量終止了運(yùn)行中的容器,該命令還有另一種編寫(xiě)方式,示例代碼如下:

另外,使用類(lèi)似方法還可以對(duì)容器進(jìn)行批量刪除、啟動(dòng)等操作。

docker stop 與 docker kill 的區(qū)別如下??

  • docker stop 執(zhí)行時(shí),首先給容器發(fā)送一個(gè)TERM信號(hào),讓容器做一些退出前必須做的保護(hù)性、安全性操作,然后讓容器自動(dòng)停止運(yùn)行,如果在一段時(shí)間內(nèi)容器沒(méi)有停止運(yùn)行,再執(zhí)行 kill -9 指令,強(qiáng)制終止容器。
  • docker kill 執(zhí)行時(shí),不論容器是什么狀態(tài),在運(yùn)行什么程序,直接執(zhí)行 kill -9 指令,強(qiáng)制終止容器。

?? 刪除容器

容器以其輕量級(jí)的特點(diǎn)受人歡迎,通常一些容器使用不久就會(huì)閑置,長(zhǎng)期積累會(huì)導(dǎo)致不必要的資源浪費(fèi),所以要及時(shí)清理無(wú)用的容器。

docker rmi 命令不同,docker rm 命令用于刪除容器,下面將介紹刪除容器的幾種方法。

?? 刪除容器方法一

首先,查看所有容器及其狀態(tài),示例代碼如下:

從以上示例中可以看到,目前宿主機(jī)中有三個(gè)處于終止?fàn)顟B(tài)的容器,以及一個(gè)處于運(yùn)行狀態(tài)的容器。

然后,結(jié)合正則與 docker rm 命令列出處于終止?fàn)顟B(tài)的容器并進(jìn)行刪除,示例代碼如下:

以上示例使用 docker rm 命令結(jié)合正則表達(dá)式實(shí)現(xiàn)了批量刪除容器,并回顯刪除的容器 ID。

最后,查看并確認(rèn)容器已刪除,示例代碼如下:

從示例中可以看到,處于終止?fàn)顟B(tài)的容器已經(jīng)被刪除,運(yùn)行狀態(tài)的容器并沒(méi)有被刪除。

?? 刪除容器方法二

首先,查看所有容器及其狀態(tài),示例代碼如下:

從以上示例中可以看到,宿主機(jī)中有三個(gè)處于終止?fàn)顟B(tài)的容器,以及一個(gè)處于運(yùn)行狀態(tài)的容器。

接著,使用 docker rm 命令結(jié)合正則表達(dá)式列出所有容器 ID 號(hào)并刪除容器,示例代碼如下:

從以上示例中可以看到,命令的執(zhí)行時(shí)發(fā)生了報(bào)錯(cuò),提示無(wú)法刪除一個(gè)正在運(yùn)行的容器,可以使用 -f 參數(shù)強(qiáng)制執(zhí)行。

然后,查看當(dāng)前容器狀態(tài),示例代碼如下:

上述示例中可以看到,docker rm 命令結(jié)合正則表達(dá)式刪除了三個(gè)終止?fàn)顟B(tài)的容器,運(yùn)行中的容器沒(méi)有被刪除。
最后,根據(jù)報(bào)錯(cuò)提示在命令中添加一個(gè) -f 參數(shù),表示強(qiáng)制刪除,示例代碼如下:

從以上示例中可以看到,處于運(yùn)行狀態(tài)中的容器已經(jīng)被刪除。

?? 刪除容器方法三

首先,查看當(dāng)前容器及其狀態(tài),示例代碼如下:

接著,使用 docker rm 命令結(jié)合 docker ps -q -f status=exited 命名篩選出處于終止?fàn)顟B(tài)的容器 ID 號(hào),并刪除容器,

示例代碼如下:

上述示例中,命令已經(jīng)執(zhí)行成功。

最后,查看容器是否被刪除,示例代碼如下:

上述示例中可以看到,處于終止?fàn)顟B(tài)的容器都已經(jīng)被刪除。

?? 刪除容器方法四

Docker1.13 版本開(kāi)始,用戶(hù)可以使用 docker container prune 命令刪除處于終止?fàn)顟B(tài)的容器。

首先,查看當(dāng)前容器及其狀態(tài),示例代碼如下:

接著,使用命令開(kāi)始刪除所有處于終止?fàn)顟B(tài)的容器,示例代碼如下:

從以上示例中可以看到,當(dāng) docker container prune 命令執(zhí)行之后,系統(tǒng)會(huì)向用戶(hù)發(fā)出警告信息,并詢(xún)問(wèn)是否要繼續(xù)。

docker container prune 會(huì)直接刪除所有處于終止?fàn)顟B(tài)的容器,為了防止用戶(hù)的誤操作,將有用的容器刪除,命令執(zhí)行時(shí)會(huì)有警告信息與詢(xún)問(wèn)信息。

這時(shí),如果確認(rèn)要?jiǎng)h除,可輸入 “y” ,否則,輸入 “n” 即可阻止命令執(zhí)行。示例刪除了所有處于終止?fàn)顟B(tài)的容器,命令執(zhí)行成功之后返回一個(gè)釋放內(nèi)存的值。

最后,查看當(dāng)前容器及其狀態(tài),示例代碼如下:

從以上示例中可以看到,處于終止?fàn)顟B(tài)的容器已經(jīng)被刪除,而處于運(yùn)行狀態(tài)的容器并沒(méi)有受到影響。

2. 容器資源限制

在默認(rèn)情況下,Docker 沒(méi)有對(duì)容器進(jìn)行硬件資源的限制。使用 Dcoker 運(yùn)行容器時(shí),一臺(tái)主機(jī)上可能會(huì)運(yùn)行成百上千個(gè)容器,這些容器雖然相互隔離,但是在底層使用著相同的 CPU、內(nèi)存磁盤(pán) 等資源。

如果不對(duì)容器使用的資源進(jìn)行限制,那么容器對(duì)宿主機(jī)資源的消耗可能導(dǎo)致其他容器或進(jìn)程不能夠正常運(yùn)行,嚴(yán)重時(shí)可能導(dǎo)致服務(wù)完全不可用。

本節(jié)將介紹如何對(duì)容器配置 CPU、內(nèi)存、Block IO 等資源的限制。

?? 限制容器內(nèi)存資源

Linux 服務(wù)器上,如果內(nèi)核檢測(cè)到?jīng)]有足夠的內(nèi)存(Memory)來(lái)執(zhí)行重要的系統(tǒng)功能,內(nèi)核會(huì)提示OOME(Out of Memory Error,內(nèi)存溢出)并開(kāi)始終止進(jìn)程以釋放內(nèi)存,這稱(chēng)為 OOM 操作。

任何進(jìn)程都有可能被終止,包括 Docker 和其他重要的應(yīng)用程序。如果終止了系統(tǒng)關(guān)鍵進(jìn)程,可能導(dǎo)致整個(gè)系統(tǒng)癱瘓。

設(shè)置限制內(nèi)存上限雖然能保護(hù)主機(jī),但是也可能會(huì)導(dǎo)致容器里的服務(wù)運(yùn)行不暢。如果為服務(wù)設(shè)置的內(nèi)存上限太小,服務(wù)在正常工作時(shí)可能出現(xiàn)資源不足;

如果設(shè)置過(guò)大,則會(huì)因?yàn)檎{(diào)度器算法浪費(fèi)內(nèi)存。因此,合理的做法是遵循以下原則。

  • 為應(yīng)用做內(nèi)存壓力測(cè)試,了解正常業(yè)務(wù)需求下內(nèi)存的使用情況,然后再進(jìn)入生產(chǎn)環(huán)境。
  • 限制容器的內(nèi)存使用上限。
  • 盡量保持主機(jī)的資源充足,一旦通過(guò)監(jiān)控發(fā)現(xiàn)資源不足,就進(jìn)行擴(kuò)容或者對(duì)容器進(jìn)行遷移。
  • 內(nèi)存資源充足的情況下,盡量不要使用 Swap(交換分區(qū)),Swap 的使用會(huì)導(dǎo)致內(nèi)存計(jì)算變得復(fù)雜,對(duì)調(diào)度器造成壓力。

下面介紹Docker啟動(dòng)參數(shù)中的內(nèi)存限制參數(shù)。

-m,--memory

設(shè)置容器可使用的最大內(nèi)存,最小值是4MB。

--memory-swap

設(shè)置容器可使用內(nèi)存+Swap的最大值。

--memory-swapiness

默認(rèn)情況下,用戶(hù)可以設(shè)置一個(gè)0~100的值,代表允許內(nèi)存與交換分區(qū)置換的比例。

--memory-reservation

設(shè)置一個(gè)內(nèi)存使用的 soft limit(非強(qiáng)制性限制),如果 Docker 發(fā)現(xiàn)主機(jī)內(nèi)存不足,會(huì)執(zhí)行 OOM 操作。這個(gè)值必須小于 –memory 設(shè)置的值。

--kernel-memory

容器能夠使用的內(nèi)核內(nèi)存的大小,最小值為 4MB。

--oom-kill-disable

設(shè)置是否在運(yùn)行 OOM 時(shí)候終止容器進(jìn)程。
宿主機(jī)會(huì)在內(nèi)存不足時(shí),隨機(jī)關(guān)閉一些進(jìn)程,而該參數(shù)會(huì)保護(hù)容器進(jìn)程不被關(guān)閉。只有通過(guò)設(shè)置 -memory 限制容器內(nèi)存,才可以使用該參數(shù),否則容器會(huì)耗盡主機(jī)內(nèi)存,而且導(dǎo)致主機(jī)應(yīng)用被終止。

注:--memory-swap 只有在設(shè)置了 -memory 時(shí)才有意義。
 使用 Swap 允許容器在耗盡所有可用的內(nèi)存時(shí),將多余的內(nèi)存需求寫(xiě)入磁盤(pán)。兩者的關(guān)系如表所示。

以上兩個(gè)參數(shù)默認(rèn)值都為 -1,即對(duì)容器使用 內(nèi)存Swap 沒(méi)有限制。

下面使用 progrium/stress 鏡像來(lái)介紹如何為容器分配內(nèi)存,該容器可以模擬進(jìn)行壓力測(cè)試。

示例代碼如下:

以上示例運(yùn)行了一個(gè)容器,分配可用最大內(nèi)存為 300MB,可用 Swap100MB

其中,–vm 1 參數(shù)表示啟動(dòng)一個(gè)內(nèi)存工作線程
–vm-bytes 280M 參數(shù)表示每個(gè)線程分配 280MB 內(nèi)存。
可以看到系統(tǒng)不斷地給容器分配內(nèi)存、釋放內(nèi)存,一直循環(huán)。由于使用的內(nèi)存 380MB,在最大使用量(400MB)之內(nèi),容器正常運(yùn)行。

下面測(cè)試內(nèi)存使用超出限額的情況,實(shí)例代碼如下:

從以上示例中可以看到,容器使用的內(nèi)存超過(guò)了限額,容器里的進(jìn)程被終止掉了,其中,signal 9 就是終止進(jìn)程信號(hào),最后容器退出。

如果在創(chuàng)建容器時(shí)僅指定 -m 參數(shù),不設(shè)置 -memory-swap 參數(shù),那么 -memory-swap 默認(rèn)是 -m 的兩倍,

示例代碼如下:

在以上示例中,容器最多使用 100MB 內(nèi)存和 100MB Swap

?? 限制容器CPU資源

主機(jī)上的進(jìn)程會(huì)通過(guò)時(shí)間分片機(jī)制使用 CPU。CPU 用頻率來(lái)量化,也就是每秒執(zhí)行的運(yùn)算次數(shù)。為容器限制 CPU 資源并不是改變 CPU 的頻率,而是改變每個(gè)容器能使用的 CPU 時(shí)間片。

理想狀態(tài)下,CPU 應(yīng)該一直處于運(yùn)算狀態(tài),并且進(jìn)程的計(jì)算量不會(huì)超過(guò) CPU 的處理能力。

Docker 允許用戶(hù)為每個(gè)容器設(shè)置一個(gè)數(shù)字,代表容器的 CPU share(共享),默認(rèn)情況下每個(gè)容器的 share 值是 1000。這個(gè) share 值是相對(duì)的,本身并不能代表任何確定的意義。當(dāng)主機(jī)上有多個(gè)容器運(yùn)行時(shí),每個(gè)容器占用的 CPU 時(shí)間比例為它的 share 值在總額中的比例。

例如,主機(jī)上有兩個(gè)一直使用 CPU 的容器(為了方便理解,不考慮主機(jī)上運(yùn)行的其他進(jìn)程),其 CPU share 都為 1000,那么兩個(gè)容器 CPU 使用率都是 50%

如果把其中一個(gè)容器的 share 值設(shè)置為 500,那么兩者 CPU 的使用比為 2:1;如果刪除 share 值為 1000 的容器,剩下來(lái)容器的 CPU 使用率將會(huì)是 100%。

Docker 為容器設(shè)置 CPU 資源限制的參數(shù)是 -c–cpu-shares,其值是一個(gè)整數(shù)。運(yùn)行兩個(gè)容器 test01test02,并設(shè)置 CPU 權(quán)重,

示例代碼如下:

以上示例中分別為 test01test02 設(shè)置 CPU share10002000。

接著,使用 docker stats 查看容器占用 CPU 情況,示例代碼如下:

從以上示例中可以看到,兩個(gè)容器 CPU 的使用占比約為 2:1,與先前設(shè)置的 share 值相吻合。

此時(shí)將 share 值為 2000 的 test02 容器暫停,再來(lái)查看 CPU 使用情況,示例代碼如下:

設(shè)置 CPU 資源限制還可以使用 –cpuset-cpus 參數(shù),它能夠指定容器使用某一顆 CPU。這里使用 CPU 測(cè)試鏡像 agileek/cpuset-test 進(jìn)行測(cè)試,其功能是將 CPU 用滿(mǎn),

示例代碼如下:

使用宿主機(jī) top 命令查看 CPU 使用情況,可以看到 CPU1 已經(jīng)被占滿(mǎn),而 CPU0 沒(méi)有受到影響,如圖所示:

?? 限制容器 Block IO

Block IO 表示磁盤(pán)的讀寫(xiě),Docker 可以用配置 bps(每秒讀寫(xiě)的數(shù)據(jù)量)和 iops(每秒讀寫(xiě)的次數(shù))的方式限制容器對(duì)磁盤(pán)讀寫(xiě)的帶寬。

下面介紹限制 bps 與 iops 的參數(shù)。

--device-read-bps

限制讀某個(gè)設(shè)備的bps。

--device-write-bps

限制寫(xiě)某個(gè)設(shè)備的bps。

--device-read-iops

限制讀某個(gè)設(shè)備的iops。

--device-write-iops

限制寫(xiě)某個(gè)設(shè)備的iops。

默認(rèn)情況下,所有容器對(duì)磁盤(pán)讀寫(xiě)的帶寬是相同的,通過(guò)配置 -blkio-weight 參數(shù)的值(10-1000)可以指定容器 Block IO 的優(yōu)先級(jí)。–blkio-weight-cpu-shares 類(lèi)似,默認(rèn)值都是 500。

下面運(yùn)行的兩個(gè)容器 test01test02,其中,test01 讀寫(xiě)磁盤(pán)的帶寬是 test02 的兩倍。

從以上示例中可以看到,容器 test01 的相對(duì)權(quán)重值是 800,而 test02 的相對(duì)權(quán)重值是 400,故 test01 讀寫(xiě)磁盤(pán)的帶寬是 test02 的兩倍。

下面運(yùn)行一個(gè)容器,限制其對(duì) /dev/sda 寫(xiě)入的速率不高于 20MB/s。因?yàn)槿萜魑募到y(tǒng)在宿主機(jī)的 /dev/sda 上,在容器中寫(xiě)文件相當(dāng)于對(duì)宿主機(jī)的 /dev/sda 進(jìn)行寫(xiě)入操作。

示例代碼如下:

以上示例運(yùn)行了一個(gè) CentOS 容器,并限制其寫(xiě) /dev/sda 的速率為 20MB/s。

下面通過(guò)命令查看該容器的寫(xiě)入速率,示例代碼如下:

從以上示例中可以看到,設(shè)置了寫(xiě)入限制的容器,寫(xiě)入速率為 19.4MB/s,沒(méi)有超過(guò)寫(xiě)入限制的 20MB/s

作為對(duì)比,下面運(yùn)行一個(gè)不限制寫(xiě)入速率的容器,示例代碼如下:

以上示例中,一個(gè)不限制讀寫(xiě)速率的容器,寫(xiě)入速率是 61.3MB/s。

3. 總結(jié)

這兩篇文章,首先介紹了如何獲取 Docker 幫助手冊(cè);然后通過(guò)大量的實(shí)驗(yàn)講解了操作 Docker 容器的方法,包括進(jìn)入、停止、刪除容器等,以及容器各種狀態(tài)之間如何轉(zhuǎn)換;
最后介紹了 Docker 容器的資源限制,包括 限制內(nèi)存、CPU、BLOCK IO 三種方法。

到此這篇關(guān)于Docker如何安全地停止和刪除容器的文章就介紹到這了,更多相關(guān)Docker 停止刪除容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker使用Swarm組建集群的方法

    Docker使用Swarm組建集群的方法

    Docker 使用 Swarm 可以很方便的在多個(gè)主機(jī)上創(chuàng)建容器集群,并且容器之間可以跨主機(jī)網(wǎng)絡(luò)通信。這篇文章主要介紹了Docker使用Swarm組建集群,需要的朋友可以參考下
    2017-11-11
  • Docker容器的加載分層原理及commit鏡像

    Docker容器的加載分層原理及commit鏡像

    這篇文章主要為大家介紹了Docker容器的加載分層原理及commit鏡像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Docker安裝配置MySQL的實(shí)現(xiàn)步驟

    Docker安裝配置MySQL的實(shí)現(xiàn)步驟

    MySQL 是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在 WEB 應(yīng)用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))應(yīng)用軟件之一。在本教程中,會(huì)帶大家正確安裝配置MySQL在Docker
    2021-11-11
  • Docker部署XXL-JOB的示例代碼

    Docker部署XXL-JOB的示例代碼

    XXL-JOB是一個(gè)分布式任務(wù)調(diào)度平臺(tái),可通過(guò)MySQL用戶(hù)創(chuàng)建和Docker容器化快速部署,本文詳細(xì)介紹了從環(huán)境準(zhǔn)備到驗(yàn)證部署的全過(guò)程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • docker 啟動(dòng)elasticsearch鏡像,掛載目錄后報(bào)錯(cuò)的解決

    docker 啟動(dòng)elasticsearch鏡像,掛載目錄后報(bào)錯(cuò)的解決

    這篇文章主要介紹了docker 啟動(dòng) elasticsearch鏡像,掛載目錄后報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker搭建持續(xù)集成平臺(tái)Jenkins的最簡(jiǎn)教程分享

    Docker搭建持續(xù)集成平臺(tái)Jenkins的最簡(jiǎn)教程分享

    Jenkins 是一個(gè)廣泛使用的開(kāi)源持續(xù)集成工具,它能夠自動(dòng)化構(gòu)建、測(cè)試和部署軟件項(xiàng)目,本文我們將使用 Docker 搭建一個(gè)基于 Jenkins 的持續(xù)集成平臺(tái),感興趣的可以了解下
    2024-03-03
  • 局域網(wǎng)內(nèi)部署 Docker Registry(推薦)

    局域網(wǎng)內(nèi)部署 Docker Registry(推薦)

    本文將從創(chuàng)建單機(jī)的 Docker Registry 開(kāi)始,逐步完成局域網(wǎng)內(nèi)可用的 Docker Registry 的創(chuàng)建,并重點(diǎn)解釋如何使用 IP 地址訪問(wèn) Registry 的方法
    2017-05-05
  • docker容器從入門(mén)到癡迷(推薦)

    docker容器從入門(mén)到癡迷(推薦)

    這篇文章主要介紹了docker容器從入門(mén)到癡迷,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Docker數(shù)據(jù)卷常用操作代碼實(shí)例

    Docker數(shù)據(jù)卷常用操作代碼實(shí)例

    這篇文章主要介紹了Docker數(shù)據(jù)卷常用操作代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Docker?文件系統(tǒng)-AUFS?原理介紹

    Docker?文件系統(tǒng)-AUFS?原理介紹

    這篇文章主要介紹了Docker?文件系統(tǒng)-AUFS原理,Docker?主要是基于?Namespace、cgroups?和聯(lián)合文件系統(tǒng)這三大核心技術(shù)實(shí)現(xiàn)的,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論