docker配置本地镜像与容器的存储位置
LiuSw Lv6

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

查看docker占用情况

1
2
3
4
5
6
7
8
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

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

1
docker system prune

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

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

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

1.软链接

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

1
docker info | grep "Docker Root Dir"
  • 首先停掉Docker服务:
1
service docker stop
  • 然后移动整个/var/lib/docker目录到目的路径:
1
2
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: 以下操作建设你已经有现成的卷组,直接可以划逻辑卷。或者你可以自己创建逻辑卷,或者不适用逻辑卷直接使用分区

1
2
lvcreate -L 300G lv_docker vg_home
mkfs.ext4 /dev/vg_home/lv__docker
  • (2)挂载新分区到临时挂载点
1
2
mkdir /mnt/docker
mount /dev/vg_home/lv_docker /mnt/docker/
  • (3)停掉docker后拷贝/var/lib/docker下数据到临时挂载点
1
2
service docker stop
cp -r /var/lib/docker/* /mtn/docker
  • (4)备份/var/lib/docker 为/var/lib/docker.bak,并创建新的/var/lib/docker目录
1
2
mv /var/lib/docker /var/lib/docker.bak
mkdir /var/lib/docker
  • (5)挂载新分区到/var/lib/docker,并设置开机自动挂载
1
2
3
4
5
6
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是否可用,数据是否完整
1
2
docker images
docker ps -a
  • (7)确认无误后卸载临时挂载点,删除/var/lib/docker.bak
1
2
umount /mnt/docker
rm -rf /var/lib/docker.bak

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

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

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

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

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

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

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

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

1
2
3
4
5
6
7
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

重启服务

1
2
systemctl daemon-reload
service docker restart

查看配置是否生效

 评论