在Centos7 中更改Docker默認(rèn)鏡像和容器的位置
一、Why?
通常,當(dāng)你開始使用docker時(shí),我們并不太關(guān)心Docker 用于存儲(chǔ)鏡像和容器的默認(rèn)目錄。當(dāng)使用Docker進(jìn)行更多實(shí)驗(yàn)時(shí),Docker開始占用大量的空間時(shí),你不得不按下緊急按鈕。所以現(xiàn)在是時(shí)候把故障排除放在如何改變docker的默認(rèn)存儲(chǔ)位置了。費(fèi)了很大力瀏覽了許多網(wǎng)站和論壇后,我無(wú)法確定在Centos7主機(jī)上更改Docker鏡像和容器的默認(rèn)目錄的步驟。這篇文章提供了特定于Centos7的說(shuō)明(它也適用于RHEL7)。對(duì)于Debian,我可以找到很多文檔和“如何”在互聯(lián)網(wǎng)上發(fā)布相關(guān)的文章,但Centos7 沒(méi)有多少。
二、How?
在試圖改變Docker的默認(rèn)存儲(chǔ)位置時(shí),我們必須知道一些重要的信息。
Docker 當(dāng)前使用的默認(rèn)存儲(chǔ)位置
Docker 當(dāng)前使用的存儲(chǔ)驅(qū)動(dòng)程序
鏡像和容器要存放的新存儲(chǔ)空間
Docker 默認(rèn)的位置在/var/lib/docker,當(dāng)前所有的鏡像、容器都存儲(chǔ)在這兒。如果你有任何在運(yùn)行的容器,停止這些容器,并確保沒(méi)有容器在運(yùn)行,然后運(yùn)行以下命令,確定當(dāng)前Docker使用的存儲(chǔ)驅(qū)動(dòng)。(你會(huì)在后面的文章中找出為什么要記錄它)
# docker info
在輸出的信息中,查找Storage Driver那行,并記下它。在我的主機(jī)上是devicemapper。下一步是停止Docker 服務(wù)
# sudo systemctl stop docker
創(chuàng)建一個(gè)Drop-In 文件
下一步是在/etc/systemd/system/docker.service.d 目錄下創(chuàng)建一個(gè)Drop-In文件“docker.conf”,默認(rèn) docker.service.d 文件夾不存在。所以你必須先創(chuàng)建它。
# sudo mkdir /etc/systemd/system/docker.service.d # sudo touch /etc/systemd/system/docker.service.d/docker.conf
創(chuàng)建Drop-In 文件的原因,是我們希望Docker 服務(wù),使用docker.conf文件中提到的特定參數(shù),將默認(rèn)服務(wù)所使用的位于/lib/systemd/system/docker.service文件中的參數(shù)進(jìn)行覆蓋。如果你想深入了解Drop-In,請(qǐng)閱讀system.unit文檔
定義新的存儲(chǔ)位置
現(xiàn)在打開docker.conf增加如下內(nèi)容:
# 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 是新的存儲(chǔ)位置,而devicemapper是當(dāng)前docker所使用的存儲(chǔ)驅(qū)動(dòng)。如果你的存儲(chǔ)驅(qū)動(dòng)有所不同,請(qǐng)輸入之前第一步查看并記下的值。Docker官方文檔中提供了更多有關(guān)各種存儲(chǔ)驅(qū)動(dòng)器的信息?,F(xiàn)在,你可以重新加載服務(wù)守護(hù)程序,并啟動(dòng)Docker服務(wù)了。這將改變新的鏡像和容器的存儲(chǔ)位置。
# sudo systemctl daemon-reload # sudo systemctl start docker
為了確認(rèn)一切順利,運(yùn)行 # docker info 命令檢查Docker 的根目錄.它將被更改為/mnt/new_volume
如果你已經(jīng)有存在的容器和鏡像,該怎么辦?
如果你想將現(xiàn)有的容器和鏡像遷移到新的位置,在修改docker.conf之后,不要重新加載daemon守護(hù)程序和啟動(dòng)docker服務(wù) ,(譯者注:在不添加docker.conf文件的方式下,使用軟鏈接的方法進(jìn)行改變根目錄。)將/var/lib/docker 中已存在的數(shù)據(jù)移動(dòng)到新的位置里。然后創(chuàng)建一個(gè)符號(hào)鏈接。
Note:我沒(méi)有嘗試過(guò)以下方式,因?yàn)槲也恍枰A衄F(xiàn)有的容器和鏡像,但這些步驟應(yīng)該有效;如果你遇到任何問(wèn)題和其它任何替代的方法請(qǐng)?jiān)谙路皆u(píng)論。我會(huì)修改帖子。在你準(zhǔn)備嘗試冒險(xiǎn)之前,請(qǐng)備份一下你的數(shù)據(jù)。
# cp -rp /var/lib/docker /mnt/new_volume
創(chuàng)建軟鏈接(譯者注:創(chuàng)建軟鏈之前,請(qǐng)先將原/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守護(hù)程序和 啟動(dòng) docker服務(wù)。(譯者注:這里無(wú)需重新加載daemon守護(hù)程序,只需啟動(dòng)docker 服務(wù)即可)
# sudo systemctl daemon-reload # sudo systemctl start docker
現(xiàn)在已存在的數(shù)據(jù)應(yīng)該在軟鏈的源目錄內(nèi),以及新的容器和鏡像將存儲(chǔ)在新的位置里,即/mnt/new_volume/docker ,運(yùn)行 # docker info 進(jìn)行確認(rèn)。
(譯者注:步驟正確的話,此時(shí)根目錄應(yīng)該指向了軟鏈接的源目錄 /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
...省略輸出
備注:文中有斜體并有橫線的字體的意思是原文作者的有誤之處(英語(yǔ)不好,如有誤解原文之意還請(qǐng)各位大牛及時(shí)指出,不吝賜教),相關(guān)位置都有注釋。
以上所述是小編給大家介紹的在Centos7 中更改Docker默認(rèn)鏡像和容器的位置,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Dockerfile中multi-stage(多階段構(gòu)建)詳解
在2017年5月3日即將發(fā)行的 Docker 17.05.0-ce 中,Docker 官方提供了簡(jiǎn)便的多階段構(gòu)建 (multi-stage build) 方案,下面這篇文章主要給大家介紹了關(guān)于Dockerfile中multi-stage(多階段構(gòu)建)的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03docker安裝nginx之后無(wú)法訪問(wèn)的解決
這篇文章主要介紹了docker安裝nginx之后無(wú)法訪問(wèn)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Docker創(chuàng)建鏡像、怎么修改、上傳鏡像等詳細(xì)介紹
這篇文章主要介紹了Docker創(chuàng)建鏡像、怎么修改、上傳鏡像等詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12Docker搭建LibreSpeed的實(shí)現(xiàn)步驟
LibreSpeed 是一個(gè)輕量級(jí)的網(wǎng)絡(luò)速度測(cè)試工具,本文主要介紹了Docker搭建LibreSpeed的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04Docker load之后鏡像名字為none問(wèn)題解決方法
這篇文章主要介紹了Docker load之后鏡像名字為none問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12docker發(fā)布sunnyNgrok實(shí)現(xiàn)內(nèi)外網(wǎng)穿透的方法(容器內(nèi)執(zhí)行命令)
這篇文章主要介紹了docker上發(fā)布 sunnyNgrok 實(shí)現(xiàn)內(nèi)外網(wǎng)穿透,容器內(nèi)執(zhí)行命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03