修改 Docker 鏡像默認存儲位置的方法

因爲系統初始分區的緣由,致使操做系統中對應 / 分區不會太大,經過 /var 目錄不會單獨分區。若是上面運行 Docker 服務,通過長時間的使用,會使本來就比較大的分區愈來愈不夠用。如何更好地的處理這個問題呢?linux

修改 Docker 鏡像默認存儲位置的方法

1. 使用軟連接

咱們知道在操做系統當中,默認狀況下 Docker 容器的存放位置在 /var/lib/docker 目錄下面,能夠經過下面命令查看具體位置。docker

# 默認存放位置
$ sudo docker info | grep "Docker Root Dir"

解決默認存儲容量不足的狀況,最直接且最有效的方法就是掛載新的分區到該目錄。可是在原有系統空間不變的狀況下,因此採用軟連接的方式,修改鏡像和容器的存放路徑達到一樣的目的。json

# 停掉Docker服務
$ systemctl restart docker

# 停掉Docker服務
$ service docker stop

而後移動整個 /var/lib/docker 目錄到空間不較大的目的路徑。這時候啓動 Docker 時發現存儲目錄依舊是 /var/lib/docker 目錄,可是其實是存儲在數據盤 /data/docker 上了。vim

# 移動原有的內容
$ mv /var/lib/docker /data/docker

# 進行連接
$ ln -sf /data/docker /var/lib/docker

2. 指定容器啓動參數

在配置文件中指定容器啓動的參數 --graph=/var/lib/docker 來指定鏡像和容器存放路徑。Docker 的配置文件能夠設置大部分的後臺進程參數,在各個操做系統中的存放位置不一致。在 Ubuntu 中的位置是 /etc/default/docker 文件,在 CentOS 中的位置是 /etc/sysconfig/docker 文件。bash

# CentOS6
# 由於Ubuntu默認開啓了selinux機制
OPTIONS=--graph="/data/docker" --selinux-enabled -H fd://

# CentOS7
# 修改docker.service文件,使用-g參數指定存儲位置
$ vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --graph /new-path/docker
# Ubuntu
# 由於Ubuntu默認沒開啓selinux機制
OPTIONS=--graph="/data/docker" -H fd://

從新啓動以後,Docker 的路徑就改爲 /data/docker 了。markdown

# 從新reload配置文件
$ sudo systemctl daemon-reload

# 重啓docker服務
$ sudo systemctl restart docker.service

若是 Docker 的版本是 1.12 或以上的,能夠修改或新建 daemon.json 文件。修改後會當即生效,不需重啓 Docker 服務。app

# 修改配置文件
$ vim /etc/docker/daemon.json
{
    "registry-mirrors":
        ["http://7e61f7f9.m.daocloud.io"],
    "graph": "/new-path/docker"
}

3. System 下建立配置文件

在 /etc/systemd/system/docker.service.d 目錄下建立一個 Drop-In 文件 docker.conf,默認 docker.service.d 文件夾不存在,必須先建立它。建立 Drop-In 文件的緣由,是咱們但願 Docker服務使用 docker.conf 文件中提到的特定參數,將默認服務所使用的位於 /lib/systemd/system/docker.service 文件中的參數進行覆蓋。編輯器

# 定義新的存儲位置
$ sudo vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=/usr/bin/dockerd --graph="/data/docker" --storage-driver=devicemapper

保存並退出 vim 編輯器 /data/docker 就是新的存儲位置,而 devicemapper 是當前 Docker 所使用的存儲驅動。若是你的存儲驅動有所不一樣,請輸入以前第一步查看並記下的值。如今,你能夠從新加載服務守護程序,並啓動 Docker 服務了,這將改變新的鏡像和容器的存儲位置。爲了確認一切順利,運行 docker info 命令檢查 Docker 的根目錄。ide

# 從新reload配置文件
$ sudo systemctl daemon-reload

# 重啓docker服務
$ sudo systemctl start docker

參考文檔

相關文章
相關標籤/搜索