Docker 迁移

迁移目录

主要是为了不让Docker镜像,容器占用系统盘的容量!

如果就一块盘或者系统盘容量大,这部分内容可忽略!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#测试安装NGINX
docker pull nginx
docker run -d -p 8080:80 nginx

# 给Docker廋身一下
#docker system prune

#停止Docker服务
systemctl stop docker

#创建目标目录
mkdir -p /data/docker/

#同步源目录文件 -> 目标目录
rsync -avz /var/lib/docker/ /data/docker

#修改Docker配置文件
vim /etc/docker/daemon.json

#修改或者新增内容如下
{
"data-root": "/data/docker"
}

#启动Docker服务
systemctl start docker

# 查看是否修改成功
docker info | grep "Docker Root Dir"

#输出:Docker Root Dir: /data/docker 就OK了!

挂载

完整步骤如下:

  1. 停止Docker服务
1
sudo systemctl stop docker
  1. 备份原Docker数据
1
2
sudo mkdir -p /var/lib/docker.backup
sudo cp -R /var/lib/docker/* /var/lib/docker.backup/
  1. 确保目标目录存在
1
sudo mkdir -p /data1/docker
  1. 将原Docker数据完整拷贝到新目录
1
sudo rsync -avx /var/lib/docker/ /data1/docker/
  1. 修改 /etc/rc.local 文件
1
sudo vim /etc/rc.local

添加以下内容:

1
2
3
#!/bin/bash
mount --bind /data1/docker /var/lib/docker
exit 0
  1. 确保 /etc/rc.local 有执行权限
1
sudo chmod +x /etc/rc.local
  1. 创建 systemd 服务文件(如果不存在)
1
sudo vim /etc/systemd/system/rc-local.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target

[Service]
Type=oneshot
ExecStart=/etc/rc.local
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  1. 启用并启动 rc-local 服务
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable rc-local
sudo systemctl start rc-local
  1. 启动Docker服务
1
sudo systemctl start docker
  1. 验证
1
2
3
4
5
6
7
8
9
# 检查挂载
mount | grep docker

# 验证Docker目录
docker info | grep "Docker Root Dir"

# 检查容器和镜像是否正常
docker ps
docker images
  1. 可选:清理备份
1
2
# 确认一切正常后,可以删除备份
sudo rm -rf /var/lib/docker.backup

注意事项:

  • 先在测试环境验证
  • 确保有完整的数据备份
  • 检查所有容器和服务是否正常

关于/etc/rc.local说明

/etc/rc.local 是一个传统的系统启动脚本,在系统启动的最后阶段运行。

主要特点:

  • 系统启动后最后执行的脚本
  • 可以添加自定义的启动时需要执行的命令
  • 在早期Linux系统中常用于开机启动自定义脚本
  • 现代systemd系统中已经逐渐被 systemd 服务替代

使用方法:

1
2
3
4
5
# 查看是否存在
ls /etc/rc.local

# 查看内容
cat /etc/rc.local

在现代 systemd 的系统中(如CentOS 7+),如果要添加开机启动项,更推荐的方式是:

  1. 创建systemd service文件
  2. 使用 systemctl enable 命令

在排查Docker存储位置的特殊配置时,/etc/rc.local 可能包含一些自定义的挂载或配置命令。