Docker配置本地镜像与容器的存储位置

Docker配置本地镜像与容器的存储位置


查看docker占用情况

docker system df

# [root@master01 html]# docker system df
# TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
# Images          135       29        21.64GB   19.06GB (88%)
# Containers      50        43        18.73MB   0B (0%)
# Local Volumes   9         9         48B       0B (0%)
# Build Cache     0         0         0B        0B

以下命令只能清除悬空镜像,未被使用的镜像不会被删除
(未经测试,谨慎使用!!!)

docker system prune

以下命令自动清理docker
(未经测试,谨慎使用!!!)

docker system prune -a
  • 已停止的容器(container)
  • 未被任何容器所使用的卷(volume)
  • 未被任何容器所关联的网络(network)
  • 所有悬空镜像(image)

所以选择docker system prune -a自动清理docker。

1.软链接

默认情况下Docker的存放位置为:/var/lib/docker
可以通过下面命令查看具体位置:

docker info | grep "Docker Root Dir"
  • 首先停掉Docker服务:
service docker stop
  • 然后移动整个/var/lib/docker目录到目的路径:
mv /var/lib/docker /root/data/docker
ln -s /root/data/docker /var/lib/docker

这时候启动Docker时发现存储目录依旧是/var/lib/docker,但是实际上是存储在数据盘的,你可以在数据盘上看到容量变化。

2.可扩展逻辑卷

默认情况下docker的存放位置为:
/var/lib/docker

挂载大分区到/var/lib/docker;
一般选择建立逻辑分区lvm,方便后期扩展

  • (1)建立新分区,并格式化

PS: 以下操作建设你已经有现成的卷组,直接可以划逻辑卷。或者你可以自己创建逻辑卷,或者不适用逻辑卷直接使用分区

lvcreate -L 300G lv_docker vg_home
mkfs.ext4 /dev/vg_home/lv__docker
  • (2)挂载新分区到临时挂载点
mkdir /mnt/docker
mount /dev/vg_home/lv_docker /mnt/docker/
  • (3)停掉docker后拷贝/var/lib/docker下数据到临时挂载点
service docker stop
cp -r /var/lib/docker/* /mtn/docker
  • (4)备份/var/lib/docker 为/var/lib/docker.bak,并创建新的/var/lib/docker目录
mv /var/lib/docker /var/lib/docker.bak
mkdir /var/lib/docker
  • (5)挂载新分区到/var/lib/docker,并设置开机自动挂载
mount /dev/vg_home/lv_docker /var/lib/docker
vim /etc/fstab

---
 /dev/vg_home/lv_docker /docker_data   ext4    defaults 0 0
----
  • (6)检测docker是否可用,数据是否完整
docker images
docker ps -a
  • (7)确认无误后卸载临时挂载点,删除/var/lib/docker.bak
umount /mnt/docker
rm -rf /var/lib/docker.bak

3.修改镜像和容器的存放路径

指定镜像和容器存放路径的参数是–graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可。

Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致,在 Ubuntu 中的位置是:/etc/default/docker,在 CentOS 中的位置是:/etc/sysconfig/docker

  • 如果是 CentOS 则添加下面这行
OPTIONS=--graph="/root/data/docker" --selinux-enabled -H fd://
  • 如果是 Ubuntu 则添加下面这行(因为 Ubuntu 默认没开启 selinux):
OPTIONS=--graph="/root/data/docker" -H fd://
# 或者
DOCKER_OPTS="-g /root/data/docker"

最后重新启动,Docker 的路径就改成 /root/data/docker 了。

如果没有生效,按如下操作

cat >>/etc/default/docker <<EOF
DOCKER_OPTS="--graph=/root/data/docker"
EOF
systemctl restart docker

发现配置并没有生效,
解决方案:

mkdir -p /etc/systemd/system/docker.service.d
cat >> /etc/systemd/system/docker.service.d/Using_Environment_File.conf <<EOF
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS
EOF

重启服务

systemctl daemon-reload
service docker restart

查看配置是否生效

留下评论