Docker 限制容器對(duì)內(nèi)存的使用詳解
一個(gè) docker host 上會(huì)運(yùn)行若干容器,每個(gè)容器都需要 CPU、內(nèi)存和 IO 資源。對(duì)于 KVM,VMware 等虛擬化技術(shù),用戶可以控制分配多少 CPU、內(nèi)存資源給每個(gè)虛擬機(jī)。對(duì)于容器,Docker 也提供了類似的機(jī)制避免某個(gè)容器因占用太多資源而影響其他容器乃至整個(gè) host 的性能。
內(nèi)存限額
與操作系統(tǒng)類似,容器可使用的內(nèi)存包括兩部分:物理內(nèi)存和 swap。 Docker 通過(guò)下面兩組參數(shù)來(lái)控制容器內(nèi)存的使用量。
1、 -m或--memory:設(shè)置內(nèi)存的使用限額,例如 100M, 2G。
2、 --memory-swap:設(shè)置內(nèi)存+swap的使用限額。
當(dāng)我們執(zhí)行如下命令:
docker run -m 200M --memory-swap=300M ubuntu
其含義是允許該容器最多使用 200M 的內(nèi)存和 100M 的 swap。默認(rèn)情況下,上面兩組參數(shù)為 -1,即對(duì)容器內(nèi)存和 swap 的使用沒(méi)有限制。
下面我們將使用 progrium/stress 鏡像來(lái)學(xué)習(xí)如何為容器分配內(nèi)存。該鏡像可用于對(duì)容器執(zhí)行壓力測(cè)試。執(zhí)行如下命令:
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
--vm 1:?jiǎn)?dòng) 1 個(gè)內(nèi)存工作線程。
--vm-bytes 280M:每個(gè)線程分配 280M 內(nèi)存。
運(yùn)行結(jié)果如下:

因?yàn)?280M 在可分配的范圍(300M)內(nèi),所以工作線程能夠正常工作,其過(guò)程是:
- 分配 280M 內(nèi)存。
- 釋放 280M 內(nèi)存。
- 再分配 280M 內(nèi)存。
- 再釋放 280M 內(nèi)存。
- 一直循環(huán)......
如果讓工作線程分配的內(nèi)存超過(guò) 300M,結(jié)果如下:

分配的內(nèi)存超過(guò)限額,stress 線程報(bào)錯(cuò),容器退出。
如果在啟動(dòng)容器時(shí)只指定-m而不指定--memory-swap,那么--memory-swap默認(rèn)為-m的兩倍,比如:
docker run -it -m 200M ubuntu
容器最多使用 200M 物理內(nèi)存和 200M swap。
內(nèi)存限額就討論到這里,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker根目錄遷移與滾動(dòng)日志設(shè)置方法
在使用docker的過(guò)程中,需要注意docker的根目錄磁盤位置,默認(rèn)情況下docker的日志是沒(méi)有限制的,所有,除了要修改根目錄位置到比較大的地方,還需要設(shè)置docker滾動(dòng)日志方式,這篇文章主要介紹了Docker根目錄遷移與滾動(dòng)日志設(shè)置方法,需要的朋友可以參考下2025-03-03
深入理解 Docker 數(shù)據(jù)卷(Data Volume)
本文詳細(xì)介紹了Docker數(shù)據(jù)卷(DataVolume)的概念、作用、使用命令、掛載方式以及最佳實(shí)踐,數(shù)據(jù)卷是Docker中實(shí)現(xiàn)數(shù)據(jù)持久化和共享的關(guān)鍵機(jī)制之一,通過(guò)本文的學(xué)習(xí),讀者可以更好地掌握數(shù)據(jù)卷的使用方法,從而在容器化應(yīng)用中進(jìn)行有效的數(shù)據(jù)管理2024-11-11
使用docker-compose,如何調(diào)整JVM參數(shù)
這篇文章主要介紹了使用docker-compose,如何調(diào)整JVM參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
docker拉取redis最新鏡像并運(yùn)行的方法詳解
這篇文章主要介紹了docker拉取redis最新鏡像并運(yùn)行的方法,文章通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05
docker安裝prometheus和grafana的詳細(xì)過(guò)程
prometheus通過(guò)各種Exporter采集到監(jiān)控?cái)?shù)據(jù),然后存儲(chǔ)進(jìn)prometheus中,以供查詢展示,這篇文章主要介紹了docker安裝prometheus和grafana,需要的朋友可以參考下2023-02-02
Linux環(huán)境下使用Docker搭建Jenkins容器的方法步驟
本文主要介紹了Linux環(huán)境下使用Docker搭建Jenkins容器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
docker images,info,-d等命令報(bào)錯(cuò)的解決方法
最近剛接觸Docker,所以在學(xué)習(xí)的過(guò)程中出現(xiàn)了好多的問(wèn)題,百度上不好找,谷歌的話,樓主不會(huì)翻墻。后來(lái)通過(guò)各方求助和細(xì)心研究解決了一些遇到的問(wèn)題,現(xiàn)在將遇到的問(wèn)題和解決方法分享給大家,有需要的朋友們可以參考借鑒。2016-11-11
教你用100?行shell實(shí)現(xiàn)Docker詳解
這篇文章主要為大家介紹了教你用100?行shell實(shí)現(xiàn)Docker詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

