摘要:修改配置文件在的配置文件最后一行的末尾添加,添加完之后的配置為重啟服務(wù)重啟的命令如下。修改后的結(jié)果如下啟動(dòng)服務(wù)刪除源文件以上就是儲(chǔ)存的優(yōu)化方案,希望對您能夠有所幫助,更好的使用容器技術(shù)。
各位同學(xué),大家在使用Docker的過程中,有沒有想過,Docker在本地存儲(chǔ)鏡像時(shí)把文件存儲(chǔ)在哪里了呢?有沒有對文件的總大小做一定的限制呢?能不能調(diào)整本地存儲(chǔ)的位置及總限制大小呢?今天,我們就從這些問題入手,來討論一下Docker的存儲(chǔ)優(yōu)化方案。
一、Docker的默認(rèn)存儲(chǔ)策略
Docker提供了查看配置信息的命令,即docker info命令,通過該命令可以查看Docker的各種系統(tǒng)層面的信息,如當(dāng)前運(yùn)行的容器數(shù)、鏡像數(shù)、Docker版本等信息,其中就包括了存儲(chǔ)信息。
我們輸入docker info命令后,可得到類似如下的內(nèi)容:
Storage Driver: devicemapper
Pool Name: docker-253:2-923803-pool
Pool Blocksize: 65.54 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 12.9 GB
Data Space Total: 107.4 GB
Data Space Available: 19.75 GB
Metadata Space Used: 21.77 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.126 GB
Thin Pool Minimum Free Space: 10.74 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt
dm.thinpooldev` to specify a custom block storage device.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.140-RHEL7 (2017-05-03)
其中,Data Space Total 即默認(rèn)的最大儲(chǔ)存空間,約為100G;Data loop file即默認(rèn)的鏡像存儲(chǔ)路徑,可以看到默認(rèn)設(shè)置在/var/lib/docker路徑下。
值得一提的是,存儲(chǔ)目錄下的devicemapper/devicemapper/data文件是docker創(chuàng)建的稀疏文件,該文件在創(chuàng)建時(shí)即指定了大小,未真正使用的部分被系統(tǒng)由0填充,并且在磁盤統(tǒng)計(jì)時(shí)不計(jì)入使用磁盤大小。同時(shí),該文件的大小即為Docker的最大儲(chǔ)存空間。
-rw------- 1 root root 100G Nov 8 10:11 data
根據(jù)實(shí)際情況,有時(shí)需要擴(kuò)大或者縮小Docker的最大儲(chǔ)存空間,下面介紹一下具體的方法,并測試Docker的最大儲(chǔ)存空間過小,對于Docker的影響,以及相關(guān)的建議。
二、修改存儲(chǔ)位置及儲(chǔ)存空間
一般情況下,Docker的配置文件的位置為:
/etc/systemd/system/docker.service.d/docker.conf
若無此文件可手動(dòng)創(chuàng)建。此文件的內(nèi)容可參照如下配置填寫:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --storage-driver=devicemapper --insecure-registry 0.0.0.0/0 --registry-mirror http://dockerhub.yonyou.com -g /data/docker/
其中,利用-g參數(shù)即可指定存儲(chǔ)掛載路徑。比如,示例中的配置將存儲(chǔ)目錄掛載在/data/docker/路徑下。
若想修改Docker的最大儲(chǔ)存空間,也需要通過修改此配置文件實(shí)現(xiàn)。
擴(kuò)大存儲(chǔ)空間
擴(kuò)大Docker的最大儲(chǔ)存空間,直接修改配置文件即可。假設(shè)需要將Docker的最大儲(chǔ)存空間擴(kuò)大到200G,則具體的方法為:
1、停止docker服務(wù)
停止docker服務(wù)的命令如下。
systemctl stop docker
2、修改配置文件
在Docker的配置文件最后一行的末尾添加——storage-opt dm.loopdatasize=200G,添加完之后的配置為:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --storage-driver=devicemapper --insecure-registry 0.0.0.0/0 --registry-mirror http://dockerhub.yonyou.com -g /data/docker/ --storage-opt dm.loopdatasize=200G
3、重啟docker服務(wù)
重啟docker的命令如下。
systemctl daemon-reload && systemctl start docker
重啟之后,查看Docker的最大儲(chǔ)存空間:
…
Data Space Used: 1.09 GB
Data Space Total: 214.7 GB
Data Space Available: 22.36 GB
Metadata Space Used: 1.753 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.146 GB
…
Data loop file:/data/docker/devicemapper/devicemapper/data
可以看到,最大存儲(chǔ)空間的配置已經(jīng)生效,當(dāng)前約為200G.
我們在配置中同時(shí)配置了掛載目錄,可以看到,當(dāng)前docker的存儲(chǔ)文件也改變至/data/docker目錄下。
縮小存儲(chǔ)空間
我們首先想要提醒您的是,縮小Docker存儲(chǔ)空間需要清空Docker的工作目錄才能生效,清空Docker的工作目錄會(huì)導(dǎo)致所有數(shù)據(jù)丟失。一定要確認(rèn)本地所有鏡像均已備份或可丟棄后,才可進(jìn)行縮小存儲(chǔ)空間操作。
假設(shè)要將Docker的最大儲(chǔ)存空間縮小為50G,具體的方法為:
1、停止docker服務(wù)
同樣的,先使用命令停止docker服務(wù)。
systemctl stop docker
2、修改配置文件
在Docker的配置文件最后一行的末尾添加——storage-opt dm.loopdatasize=50G,添加完之后的配置為:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --storage-driver=devicemapper --insecure-registry 0.0.0.0/0 --registry-mirror http://dockerhub.yonyou.com -g /data/docker/ --storage-opt dm.loopdatasize=50G
3、刪除Docker的工作目錄
請?jiān)俅巫⒁猓蹇誅ocker的工作目錄會(huì)導(dǎo)致所有數(shù)據(jù)丟失,包括在本地保存的所有Docker鏡像。
rm -rf /data/docker
4、重啟docker服務(wù)
systemctl daemon-reload && systemctl start docker
重啟之后,查看Docker的最大儲(chǔ)存空間:
Data Space Used: 11.8 MB
Data Space Total: 53.69 GB
Data Space Available: 23.44 GB
可以看到,docker的存儲(chǔ)空間已縮小至50G左右。
那么我們可以思考一下,如果Docker的儲(chǔ)存空間過小,會(huì)對我們使用Docker產(chǎn)生什么樣的影響呢?
儲(chǔ)存空間過小的影響
為了測試Docker的最大儲(chǔ)存空間過小對Docker的影響,將Docker的最大儲(chǔ)存空間設(shè)置為2G。
下載四個(gè)鏡像,分別為:
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 053cde6e8953 4 days ago 3.96 MB
apps latest 67ea7f76e6db 5 days ago 687 MB
jenkins latest ec714cdad606 3 months ago 975 MB
dclb latest 483ca54282f0 4 months ago 44 MB
使用docker info查看Docker存儲(chǔ)空間的使用情況:
Data Space Used: 1.935 GB
Data Space Total: 2.147 GB
Data Space Available:212.3 MB
在Data Space Available項(xiàng)中,可以看到僅剩余200M左右存儲(chǔ)空間。
若此時(shí)下載其他鏡像,則可能會(huì)報(bào)如下錯(cuò)誤:
failed to register layer: devmapper: Thin Pool has 3190 free data blocks which is less than minimum required 3276 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior
如果創(chuàng)建一個(gè)容器,如alpine,則也可能會(huì)報(bào)如下錯(cuò)誤:
docker: Error response from daemon: devmapper: Thin Pool has 3239 free data blocks which is less than minimum required 3276 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior.
通過測試,可知在刪除一個(gè)鏡像并釋放空間之后,可以重新拉取小于此鏡像大小的鏡像,或者也可以成功創(chuàng)建alpine容器。
三、優(yōu)化Docker的存儲(chǔ)策略
在日常使用Docker服務(wù)時(shí),我們給出以下兩點(diǎn)建議:
1)、每天定時(shí)清理不用的Docker文件;
2)、將Docker的工作目錄設(shè)置在數(shù)據(jù)掛載磁盤文件夾里面,且設(shè)置磁盤大于100G.
優(yōu)化建議一:定時(shí)清理Docker文件
使用docker-gc可以清理Docker文件,docker-gc的清理規(guī)則是:
·Containers that exited more than an hour ago are removed(刪除已經(jīng)退出一小時(shí)的容器)
·Images that don"t belong to any remaining container after that are removed(刪除不屬于任何容器的鏡像)
運(yùn)行如下命令,每天定時(shí)使用docker-gc清理Docker文件:
sudo echo "0 2 * docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro -e FORCE_IMAGE_REMOVAL=1 spotify/docker-gc" >> /var/spool/cron/root
其中:FORCE_IMAGE_REMOVAL=1代表清理重復(fù)的鏡像。
優(yōu)化建議二:遷移Docker工作目錄
在Docker的工作目錄里面,會(huì)有很多大文件,如果將Docker的工作目錄存放在根目錄的話,會(huì)導(dǎo)致根目錄很快被占滿,因此需要將Docker的工作目錄遷移到掛載的數(shù)據(jù)磁盤。
假設(shè)要將Docker的工作目錄從/var/lib/docker遷移到/data/docker目錄下,遷移的方法為:
1、暫停Docker服務(wù)
systemctl stop docker
2、遷移工作目錄的數(shù)據(jù)
創(chuàng)建docker工作目錄,如果/data/docker已經(jīng)存在,則可以跳過此步驟,直接復(fù)制文件:
mkdir /data/docker
遷移數(shù)據(jù):
cp -rf /var/lib/docker/* /data/docker/
3.修改Docker的工作目錄
Docker的啟動(dòng)配置文件位置在:
/etc/systemd/system/docker.service.d/docker.conf
無此文件可手動(dòng)創(chuàng)建。打開此文件,在其后面增加-g /data/docker,如果已經(jīng)有-g選項(xiàng),則直接修改后面的目錄即可。修改后的結(jié)果如下:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --storage-driver=devicemapper --insecure-registry 0.0.0.0/0 --registry-mirror http://dockerhub.yonyou.com –g /data/docker/
4、啟動(dòng)Docker服務(wù)
systemctl daemon-reload && systemctl start docker
5、刪除源文件
rm -rf /var/lib/docker/*
以上就是Docker儲(chǔ)存的優(yōu)化方案,希望對您能夠有所幫助,更好的使用Docker容器技術(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/27638.html
摘要:談起閉包,它可是兩個(gè)核心技術(shù)之一異步基于打造前端持續(xù)集成開發(fā)環(huán)境本文將以一個(gè)標(biāo)準(zhǔn)的項(xiàng)目為例,完全拋棄傳統(tǒng)的前端項(xiàng)目開發(fā)部署方式,基于容器技術(shù)打造一個(gè)精簡的前端持續(xù)集成的開發(fā)環(huán)境。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老鳥,不論是面試求職,還是日...
摘要:總之,項(xiàng)目還算很受歡迎吧,這篇博客將介紹項(xiàng)目的升級版。一項(xiàng)目介紹將打包到鏡像中,就可以快速地在單個(gè)機(jī)器上搭建集群,這樣可以方便新手測試和學(xué)習(xí)。之前的版本使用為集群提供服務(wù),由于網(wǎng)絡(luò)功能更新,現(xiàn)在并不需要了。運(yùn)行參考第二部分啟動(dòng),并運(yùn)行。 摘要: kiwenlau/hadoop-cluster-docker是去年參加Docker巨好玩比賽開發(fā)的,得了二等獎(jiǎng)并贏了一塊蘋果手表,目前這個(gè)項(xiàng)目...
摘要:該公司剛剛宣布了一個(gè)計(jì)劃,意在取代現(xiàn)有的發(fā)行版。這甚至可能幫找到一個(gè)新方向。為了解決這個(gè)問題,我們在上增加了一個(gè)名為的新功能。總體而言,整個(gè)過程呈現(xiàn)如下建立包括,以及一個(gè)的基礎(chǔ)架構(gòu)。 這是 TCP CLOUD 聯(lián)合創(chuàng)始人 & 前 CTO Jakub Pavlik 于 2017 年 7 月 9 日發(fā)布于 www.mirantis.com 的文章。本文主要介紹了 Virtlet 及其未來與...
摘要:容器包的大小和完整性使得團(tuán)隊(duì)成員能夠在幾秒鐘內(nèi)部署完整的環(huán)境。由的前安全主管美國總統(tǒng)執(zhí)行辦公室網(wǎng)絡(luò)安全高級總監(jiān)聯(lián)合創(chuàng)立的,目前正在準(zhǔn)備類似的容器安全產(chǎn)品。在年,在美國召開了兩個(gè)大型會(huì)議和個(gè)小型會(huì)議。 軟件容器技術(shù)影響著從開發(fā)人員、測試人員、運(yùn)維人員到分析人員的IT團(tuán)隊(duì)中的每一個(gè)人,它不像虛擬化一樣只是系統(tǒng)管理員的工具。容器包的大小和完整性使得團(tuán)隊(duì)成員能夠在幾秒鐘內(nèi)部署完整的環(huán)境。 容器...
摘要:且容器的創(chuàng)建和停止都十分快速,幾乎跟創(chuàng)建和終止原生應(yīng)用一致。命令是編寫之后使用的。如果是在一個(gè)不支持的平臺上運(yùn)行或者不希望在中運(yùn)行,也可以使用格式的指令環(huán)境變量這個(gè)環(huán)境亦是用來表明鏡像模板最后的更新時(shí)間容器添加卷。 該文章為學(xué)習(xí)docker 筆記一 docker 簡介 Docker 是基于GO語言實(shí)現(xiàn)的開源容器項(xiàng)目,現(xiàn)在主流的Linux系統(tǒng)都支持Docker,Docker 的構(gòu)想是想要...
閱讀 2481·2023-04-25 21:41
閱讀 1653·2021-09-22 15:17
閱讀 1926·2021-09-22 10:02
閱讀 2438·2021-09-10 11:21
閱讀 2581·2019-08-30 15:53
閱讀 1001·2019-08-30 15:44
閱讀 953·2019-08-30 13:46
閱讀 1139·2019-08-29 18:36