Docker storage-driver overlay2 限制容器可占用的磁盤空間
Docker容器默認啟動的虛擬機,會占用宿主機的資源(CPU、內存、硬盤),例如默認Docker基于Overlay2驅動方式,容器硬盤的rootfs根分區空間是整個宿主機的空間大小。
可以指定默認容器的大小(在啟動容器的時候指定),可以在docker配置文件:vim /usr/lib/systemd/system/docker.service中,OPTIONS參數后面添加如下代碼,指定Docker容器rootfs容量大小為40G:
說明
overlay2.size是在 17.07.0-ce 中引入的: Add overlay2.size daemon storage-opt 。
這里使用的docker版本是19.03.11-ce:
[root@localhost ~]# docker version
Server: Docker Engine - Community
Engine:
Version: 19.03.11
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:12:26 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
overlay2.size
docker daemon配置項 中介紹了 overlay2.size
配置項,可以用來限制每個容器可以占用的磁盤空間。
overlay2.size
Sets the default max size of the container. It is supported only when the backing fs is xfs and mounted with pquota mount option. Under these conditions the user can pass any size less then the backing fs size.
Example
$ sudo dockerd -s overlay2 –storage-opt overlay2.size=1G
如文檔中所述,需要使用xfs文件系統,并且掛載時使用 pquota
開啟xfs的quota特性
#什么結果都沒有,這個表示沒有設置配額
[root@localhost ~]# xfs_quota -x -c 'report' /
[root@localhost ~]# mount -o remount,rw,uquota,prjquota /
在開始劃分分區的時候就要讓分區的配額生效,添加一塊硬盤作為docker的數據目錄
[root@localhost ~]# fdisk -l | grep sdb
Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
最早開始發根分區沒有指定該參數,重新指定不支持了。需要添加一塊新的盤支持目錄配額,因為對目錄空間的限制可以讓docker overlay模式控制每個虛擬機大小到40Gb,因為不控制那么每個容器就是占滿宿主機,對整個盤做一個分區就好了,添加一塊盤來支持目錄配額
[root@localhost ~]# mkfs.xfs -f /dev/sdb
[root@localhost ~]# mkdir -p /data
[root@localhost ~]# mount -o uquota,prjquota /dev/sdb /data/
[root@localhost ~]# df -h | grep sdb
/dev/sdb 50G 33M 50G 1% /data
這個分區就支持目錄配額,支持目錄配額以后就可以對docker去限制其空間大小
[root@localhost ~]# xfs_quota -x -c 'report' /data/
User quota on /data (/dev/sdb)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
Project quota on /data (/dev/sdb)
Blocks
Project ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
#0 0 0 0 00 [--------]
#docker的overlay2需要的是 pquota ,在 /etc/fstab 中設置
[root@localhost ~]# blkid /dev/sdb
/dev/sdb: UUID="f1822c62-7544-406c-b042-b94f3b7a3502" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab
UUID=f1822c62-7544-406c-b042-b94f3b7a3502 /data xfs rw,pquota
[root@localhost ~]# mount -a
#可以在 /proc/mounts 中看到已經被掛載的目錄和參數:
[root@localhost ~]# cat /proc/mounts | grep sdb
/dev/sdb /data xfs rw,relatime,attr2,inode64,usrquota,prjquota 0 0
配置docker daemon
將docker引擎默認數據存儲目錄/var/lib/docker重命名,并且將/data/docker目錄軟鏈接至/var/lib/下即可
[root@localhost ~]# mkdir -p /data/docker/
[root@localhost ~]# cd /var/lib/
[root@localhost lib]# mv docker docker.bak
[root@localhost lib]# ln -s /data/docker/ .
[root@localhost lib]# ll docker
lrwxrwxrwx 1 root root 13 Aug 17 16:29 docker -> /data/docker/
現在是docker引擎自動配額,不需要我們去手動限制docker容器的配額--storage-opt overlay2.size=40G,一旦磁盤配額修改完之后就不要再修改(/usr/lib/systemd/system/docker.service
配置文件如下,這里將每個容器可以使用的磁盤空間設置為40G)
[root@localhost lib]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -b br0 -H fd:// --containerd=/run/containerd/containerd.sock --storage-opt overlay2.size=40G
重啟Docker服務,并且查看進程,可以看到docker overlay2.size大小配置,如下所示:
[root@localhost lib]# systemctl daemon-reload
[root@localhost lib]# systemctl restart docker
[root@localhost ~]# ps -ef | grep docker
root 1881 1 0 16:33 ? 00:00:00 /usr/bin/dockerd -b br0 -H fd:// --containerd=/run/containerd/containerd.sock --storage-opt overlay2.size=40G
Overy2模式,默認是宿主機的大小,你宿主機可以空間就是每個容器可用空間。你的云主機空間就是每個40G,為什么是40G就是因為做了overy2模式,設置了全局大小,這樣才會限制約束每個容器的空間
這樣每個容器啟動占用40G就不會占用宿主機全部空間了,其他資源限制還是一樣。
#這樣CPU 一核 2G內存 硬盤40G
[root@localhost ~]# docker run -itd --net=none --cpuset-cpus=0-0 -m 2048m --privileged centos7-ssh
58e8aafd4ea3a11cecd540b67530afcab8fd01821e3d579dc6ebee0cdfdf9956
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed8776f67171 centos7-ssh "/bin/sh -c /usr/sbi…" 3 seconds ago Up 2 seconds frosty_tharp
[root@localhost ~]# docker exec -it ed8776f67171 /bin/bash
[root@ed8776f67171 ansible]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 45G 12K 45G 1% /
智能推薦
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...
猜你喜歡
19.vue中封裝echarts組件
19.vue中封裝echarts組件 1.效果圖 2.echarts組件 3.使用組件 按照組件格式整理好數據格式 傳入組件 home.vue 4.接口返回數據格式...
【一只蒟蒻的刷題歷程】【藍橋杯】歷屆試題 九宮重排 (八數碼問題:BFS+集合set)
資源限制 時間限制:1.0s 內存限制:256.0MB 問題描述 如下面第一個圖的九宮格中,放著 1~8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。 我們把第一個圖的局面記為:12345678. 把第二個圖的局面記為:123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。 本題目的任務是已知九宮的初態...
dataV組件容器寬高發生變化后,組件不會自適應解決方法
項目中需要大屏幕數據展示,于是使用了dataV組件,但是使用是發現拖動瀏覽器邊框,dataV組件顯示異常,如圖: 于是查了官網,官網的解釋如下: 于是按照官網的意思編寫代碼: 于是可以自適應了...
CSS3干貨10:如何做一個板塊標題水平線左邊帶顏色效果
很多網站在設計欄目標題的時候,喜歡用下劃線分開欄目標題和內容部分。 而且線條左邊的部分往往還有顏色,且這個顏色跟標題的文字長短保持一致。效果如圖所示: 這種效果其實很簡單。 我這里給大家推薦兩種方式: 假定我們的標題部分 HTML 結構如下: 方式一:利用下邊框。灰色部分是 h1 的下邊框,藍色部分是 span 標簽的下邊框。 h1 的高度為 40px,span 也設置它的高度為 40px。這樣,...