摘要:修改配置文件在的配置文件最后一行的末尾添加,添加完之后的配置為重啟服務重啟的命令如下。修改后的結果如下啟動服務刪除源文件以上就是儲存的優化方案,希望對您能夠有所幫助,更好的使用容器技術。
各位同學,大家在使用Docker的過程中,有沒有想過,Docker在本地存儲鏡像時把文件存儲在哪里了呢?有沒有對文件的總大小做一定的限制呢?能不能調整本地存儲的位置及總限制大小呢?今天,我們就從這些問題入手,來討論一下Docker的存儲優化方案。
一、Docker的默認存儲策略
Docker提供了查看配置信息的命令,即docker info命令,通過該命令可以查看Docker的各種系統層面的信息,如當前運行的容器數、鏡像數、Docker版本等信息,其中就包括了存儲信息。
我們輸入docker info命令后,可得到類似如下的內容:
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 即默認的最大儲存空間,約為100G;Data loop file即默認的鏡像存儲路徑,可以看到默認設置在/var/lib/docker路徑下。
值得一提的是,存儲目錄下的devicemapper/devicemapper/data文件是docker創建的稀疏文件,該文件在創建時即指定了大小,未真正使用的部分被系統由0填充,并且在磁盤統計時不計入使用磁盤大小。同時,該文件的大小即為Docker的最大儲存空間。
-rw------- 1 root root 100G Nov 8 10:11 data
根據實際情況,有時需要擴大或者縮小Docker的最大儲存空間,下面介紹一下具體的方法,并測試Docker的最大儲存空間過小,對于Docker的影響,以及相關的建議。
二、修改存儲位置及儲存空間
一般情況下,Docker的配置文件的位置為:
/etc/systemd/system/docker.service.d/docker.conf
若無此文件可手動創建。此文件的內容可參照如下配置填寫:
[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參數即可指定存儲掛載路徑。比如,示例中的配置將存儲目錄掛載在/data/docker/路徑下。
若想修改Docker的最大儲存空間,也需要通過修改此配置文件實現。
擴大存儲空間
擴大Docker的最大儲存空間,直接修改配置文件即可。假設需要將Docker的最大儲存空間擴大到200G,則具體的方法為:
1、停止docker服務
停止docker服務的命令如下。
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服務
重啟docker的命令如下。
systemctl daemon-reload && systemctl start docker
重啟之后,查看Docker的最大儲存空間:
…
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
可以看到,最大存儲空間的配置已經生效,當前約為200G.
我們在配置中同時配置了掛載目錄,可以看到,當前docker的存儲文件也改變至/data/docker目錄下。
縮小存儲空間
我們首先想要提醒您的是,縮小Docker存儲空間需要清空Docker的工作目錄才能生效,清空Docker的工作目錄會導致所有數據丟失。一定要確認本地所有鏡像均已備份或可丟棄后,才可進行縮小存儲空間操作。
假設要將Docker的最大儲存空間縮小為50G,具體的方法為:
1、停止docker服務
同樣的,先使用命令停止docker服務。
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的工作目錄
請再次注意,清空Docker的工作目錄會導致所有數據丟失,包括在本地保存的所有Docker鏡像。
rm -rf /data/docker
4、重啟docker服務
systemctl daemon-reload && systemctl start docker
重啟之后,查看Docker的最大儲存空間:
Data Space Used: 11.8 MB
Data Space Total: 53.69 GB
Data Space Available: 23.44 GB
可以看到,docker的存儲空間已縮小至50G左右。
那么我們可以思考一下,如果Docker的儲存空間過小,會對我們使用Docker產生什么樣的影響呢?
儲存空間過小的影響
為了測試Docker的最大儲存空間過小對Docker的影響,將Docker的最大儲存空間設置為2G。
下載四個鏡像,分別為:
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存儲空間的使用情況:
Data Space Used: 1.935 GB
Data Space Total: 2.147 GB
Data Space Available:212.3 MB
在Data Space Available項中,可以看到僅剩余200M左右存儲空間。
若此時下載其他鏡像,則可能會報如下錯誤:
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
如果創建一個容器,如alpine,則也可能會報如下錯誤:
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.
通過測試,可知在刪除一個鏡像并釋放空間之后,可以重新拉取小于此鏡像大小的鏡像,或者也可以成功創建alpine容器。
三、優化Docker的存儲策略
在日常使用Docker服務時,我們給出以下兩點建議:
1)、每天定時清理不用的Docker文件;
2)、將Docker的工作目錄設置在數據掛載磁盤文件夾里面,且設置磁盤大于100G.
優化建議一:定時清理Docker文件
使用docker-gc可以清理Docker文件,docker-gc的清理規則是:
·Containers that exited more than an hour ago are removed(刪除已經退出一小時的容器)
·Images that don"t belong to any remaining container after that are removed(刪除不屬于任何容器的鏡像)
運行如下命令,每天定時使用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代表清理重復的鏡像。
優化建議二:遷移Docker工作目錄
在Docker的工作目錄里面,會有很多大文件,如果將Docker的工作目錄存放在根目錄的話,會導致根目錄很快被占滿,因此需要將Docker的工作目錄遷移到掛載的數據磁盤。
假設要將Docker的工作目錄從/var/lib/docker遷移到/data/docker目錄下,遷移的方法為:
1、暫停Docker服務
systemctl stop docker
2、遷移工作目錄的數據
創建docker工作目錄,如果/data/docker已經存在,則可以跳過此步驟,直接復制文件:
mkdir /data/docker
遷移數據:
cp -rf /var/lib/docker/* /data/docker/
3.修改Docker的工作目錄
Docker的啟動配置文件位置在:
/etc/systemd/system/docker.service.d/docker.conf
無此文件可手動創建。打開此文件,在其后面增加-g /data/docker,如果已經有-g選項,則直接修改后面的目錄即可。修改后的結果如下:
[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、啟動Docker服務
systemctl daemon-reload && systemctl start docker
5、刪除源文件
rm -rf /var/lib/docker/*
以上就是Docker儲存的優化方案,希望對您能夠有所幫助,更好的使用Docker容器技術。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27638.html
摘要:總之,項目還算很受歡迎吧,這篇博客將介紹項目的升級版。一項目介紹將打包到鏡像中,就可以快速地在單個機器上搭建集群,這樣可以方便新手測試和學習。之前的版本使用為集群提供服務,由于網絡功能更新,現在并不需要了。運行參考第二部分啟動,并運行。 摘要: kiwenlau/hadoop-cluster-docker是去年參加Docker巨好玩比賽開發的,得了二等獎并贏了一塊蘋果手表,目前這個項目...
摘要:該公司剛剛宣布了一個計劃,意在取代現有的發行版。這甚至可能幫找到一個新方向。為了解決這個問題,我們在上增加了一個名為的新功能。總體而言,整個過程呈現如下建立包括,以及一個的基礎架構。 這是 TCP CLOUD 聯合創始人 & 前 CTO Jakub Pavlik 于 2017 年 7 月 9 日發布于 www.mirantis.com 的文章。本文主要介紹了 Virtlet 及其未來與...
摘要:容器包的大小和完整性使得團隊成員能夠在幾秒鐘內部署完整的環境。由的前安全主管美國總統執行辦公室網絡安全高級總監聯合創立的,目前正在準備類似的容器安全產品。在年,在美國召開了兩個大型會議和個小型會議。 軟件容器技術影響著從開發人員、測試人員、運維人員到分析人員的IT團隊中的每一個人,它不像虛擬化一樣只是系統管理員的工具。容器包的大小和完整性使得團隊成員能夠在幾秒鐘內部署完整的環境。 容器...
摘要:且容器的創建和停止都十分快速,幾乎跟創建和終止原生應用一致。命令是編寫之后使用的。如果是在一個不支持的平臺上運行或者不希望在中運行,也可以使用格式的指令環境變量這個環境亦是用來表明鏡像模板最后的更新時間容器添加卷。 該文章為學習docker 筆記一 docker 簡介 Docker 是基于GO語言實現的開源容器項目,現在主流的Linux系統都支持Docker,Docker 的構想是想要...
閱讀 2492·2023-04-25 21:41
閱讀 1662·2021-09-22 15:17
閱讀 1933·2021-09-22 10:02
閱讀 2448·2021-09-10 11:21
閱讀 2587·2019-08-30 15:53
閱讀 1007·2019-08-30 15:44
閱讀 960·2019-08-30 13:46
閱讀 1155·2019-08-29 18:36