docker學習6:在Centos7 更改Docker預設映象和容器的位置

tonykorn97發表於2018-05-01

轉帖地址:https://www.cnblogs.com/hanyifeng/p/6837512.html?utm_source=itdadao&utm_medium=referral


一、Why?

通常,當你開始使用docker時,我們並不太關心Docker 用於儲存映象和容器的預設目錄。當使用Docker進行更多實驗時,Docker開始佔用大量的空間時,你不得不按下緊急按鈕。所以現在是時候把故障排除放在如何改變docker的預設儲存位置了。費了很大力瀏覽了許多網站和論壇後,我無法確定在Centos7主機上更改Docker映象和容器的預設目錄的步驟。這篇文章提供了特定於Centos7的說明(它也適用於RHEL7)。對於Debian,我可以找到很多文件和“如何”在網際網路上釋出相關的文章,但Centos7 沒有多少。

 

二、How?

在試圖改變Docker的預設儲存位置時,我們必須知道一些重要的資訊

? Docker 當前使用的預設儲存位置
? Docker 當前使用的儲存驅動程式
? 映象和容器要存放的新儲存空間

Docker 預設的位置在/var/lib/docker,當前所有的映象、容器都儲存在這兒。如果你有任何在執行的容器,停止這些容器,並確保沒有容器在執行,然後執行以下命令,確定當前Docker使用的儲存驅動。(你會在後面的文章中找出為什麼要記錄它)

# docker info

在輸出的資訊中,查詢Storage Driver那行,並記下它。在我的主機上是devicemapper。下一步是停止Docker 服務

sudo systemctl stop docker

建立一個Drop-In 檔案

下一步是在/etc/systemd/system/docker.service.d 目錄下建立一個Drop-In檔案“docker.conf”,預設 docker.service.d 資料夾不存在。所以你必須先建立它。

# 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,請閱讀文件

定義新的儲存位置
現在開啟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
...省略輸出

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

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

 

 

 

英文原文連結:

參考資料:

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

每個人都應是守望者,守望我們的心智,我們的理想,以防它在生活中不知不覺地墜落、被操控和被自己遺忘。。。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-2153598/,如需轉載,請註明出處,否則將追究法律責任。

相關文章