一、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,請閱讀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
...省略輸出
備注:文中有斜體并有橫線的字型的意思是原文作者的有誤之處(英語不好,如有誤解原文之意還請各位大牛及時指出,不吝賜教),相關位置都有注釋。
以上所述是小編給大家介紹的在Centos7 中更改Docker預設鏡像和容器的位置,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對腳本之家網站的支援!