在Centos7 更改Docker默認鏡像和容器的位置

                      圖片出處:https://bobcares.com/wp-content/uploads/docker-change-directory.jpghtml

1、Why?docker

一般,當你開始使用docker時,咱們並不太關心Docker 用於存儲鏡像和容器的默認目錄。當使用Docker進行更多實驗時,Docker開始佔用大量的空間時,你不得不按下緊急按鈕。因此如今是時候把故障排除放在如何改變docker的默認存儲位置了。費了很大力瀏覽了許多網站和論壇後,我沒法肯定在Centos7主機上更改Docker鏡像和容器的默認目錄的步驟。這篇文章提供了特定於Centos7的說明(它也適用於RHEL7)。對於Debian,我能夠找到不少文檔和「如何」在互聯網上發佈相關的文章,但Centos7 沒有多少。shell

 

2、How?app

在試圖改變Docker的默認存儲位置時,咱們必須知道一些重要的信息編輯器

✅ Docker 當前使用的默認存儲位置
✅ Docker 當前使用的存儲驅動程序
✅ 鏡像和容器要存放的新存儲空間字體

Docker 默認的位置在/var/lib/docker,當前全部的鏡像、容器都存儲在這兒。若是你有任何在運行的容器,中止這些容器,並確保沒有容器在運行,而後運行如下命令,肯定當前Docker使用的存儲驅動。(你會在後面的文章中找出爲何要記錄它)網站

# docker info

在輸出的信息中,查找Storage Driver那行,並記下它。在個人主機上是devicemapper。下一步是中止Docker 服務spa

sudo systemctl stop docker

建立一個Drop-In 文件code

下一步是在/etc/systemd/system/docker.service.d 目錄下建立一個Drop-In文件「docker.conf」,默認 docker.service.d 文件夾不存在。因此你必須先建立它。htm

# sudo mkdir /etc/systemd/system/docker.service.d
# sudo touch /etc/systemd/system/docker.service.d/docker.conf

建立Drop-In 文件的緣由,是咱們但願Docker 服務,使用docker.conf文件中提到的特定參數,將默認服務所使用的位於/lib/systemd/system/docker.service文件中的參數進行覆蓋。若是你想深刻了解Drop-In,請閱讀system.unit文檔

定義新的存儲位置
如今打開docker.conf增長以下內容:

# sudo vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph="/mnt/new_volume" --storage-driver=devicemapper

保存並退出VI編輯器,/mnt/new_volume 是新的存儲位置,而devicemapper是當前docker所使用的存儲驅動。若是你的存儲驅動有所不一樣,請輸入以前第一步查看並記下的值。Docker官方文檔中提供了更多有關各類存儲驅動器的信息。如今,你能夠從新加載服務守護程序,並啓動Docker服務了。這將改變新的鏡像和容器的存儲位置。

# sudo systemctl daemon-reload
# sudo systemctl start docker

爲了確認一切順利,運行 # docker info 命令檢查Docker 的根目錄.它將被更改成/mnt/new_volume

若是你已經有存在的容器和鏡像,該怎麼辦?

若是你想將現有的容器和鏡像遷移到新的位置,在修改docker.conf以後,不要從新加載daemon守護程序和啓動docker服務 譯者注:在不添加docker.conf文件的方式下,使用軟連接的方法進行改變根目錄。)將/var/lib/docker 中已存在的數據移動到新的位置裏。而後建立一個符號連接。

Note:我沒有嘗試過如下方式,由於我不須要保留現有的容器和鏡像,但這些步驟應該有效;若是你遇到任何問題和其它任何替代的方法請在下方評論。我會修改帖子。在你準備嘗試冒險以前,請備份一下你的數據。

# cp -rp /var/lib/docker /mnt/new_volume

建立軟連接(譯者注:建立軟鏈以前,請先將原/var/lib/docker目錄修改成其它名字,如/var/lib/docker-backup)

# mv /var/lib/docker /var/lib/docker-backup-2017-0510
# ln -s /mnt/new_volume/docker /var/lib/docker

而後從新加載 daemon守護程序和 啓動 docker服務。(譯者注:這裏無需從新加載daemon守護程序,只需啓動docker 服務便可)

# sudo systemctl daemon-reload # sudo systemctl start docker 

如今已存在的數據應該在軟鏈的源目錄內,以及新的容器和鏡像將存儲在新的位置裏,即/mnt/new_volume/docker ,運行 # docker info 進行確認。

譯者注:步驟正確的話,此時根目錄應該指向了軟連接的源目錄 /mnt/new_volume/docker,以下:)

...省略輸出
Name: docker
ID: 5WBA:EF4D:WQ7P:DVRN:JCI4:LWDT:XSR2:G7RE:F5TI:PD3B:A57K:E4QA
Docker Root Dir: /mnt/new_volume/docker
...省略輸出

 備註:文中有斜體並有橫線的字體的意思是原文做者的有誤之處(英語很差,若有誤解原文之意還請各位大牛及時指出,不吝賜教),相關位置都有註釋。

 

本文屬於原創譯文,歡迎轉載,轉載前請務必要註明原英文連接飛走不可

 

 

 

英文原文連接:

https://sanenthusiast.com/tag/docker-root-directory/

參考資料:

http://www.infoq.com/cn/articles/analysis-of-docker-file-system-aufs-and-devicemapper

http://coolshell.cn/articles/17200.html

相關文章
相關標籤/搜索