背景:
我们在实际环境中安装docker,linux系统都是默认安装在系统盘的/var/lib/docker目录中,而在线上线下的服务器中,规划给系统盘的目录一般不会超过50G,所以在我们的docke环境中就会出现随着镜像过多会出现docker无法运行的情况,从而影响后端服务的运行,导致出现线上和线下的问题。这就需要我们在规划中,来解决和避免这种问题的出现。
要解决上述的问题,最好的方法就是docker目录的迁移,以下提供了两种方法;
技术实现:
docker目录的迁移其实非常简单,有以下两种方法可以实现。
方法一 docker安装路径的重配置;
操作如下:
a. 停掉docker服务;
systemctl stop docker
b. docker目录拷贝;
把docker的存储目录拷贝到要迁移的目录中去,此处我们迁移的目录为/data2/docker_data ;
cp -r /var/lib/docker /var/lib/docker-bak #备份
cp -r /var/lib/docker /data2/docker_data #拷贝
c. 修改docker配置;
如果不存在配置目录则创建,存在则忽略:
mkdir -p /etc/systemd/system/docker.service.d/
编辑devicemapper.conf:
vi /etc/systemd/system/docker.service.d/devicemapper.conf
内容如下:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/data2/docker_data/docker
编辑daemon.json;
vi /etc/docker/daemon.json 添加 {"storage-driver": "devicemapper" } , 此处不修改,启动或者查询docker状态时可能会出现以下报错:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
d. 加载和重启docker服务;
systemctl daemon-reload #加载systemd管理器配置
systemctl restart docker #重启docker服务
systemctl enable docker #设置自启动
e. 验证;
docker info; 输出的信息中Docker Root Dir: /data2/docker_data/docker 咋表示修改成功;
验证镜像是否运行正常:
docker images #检查镜像
docker ps #检查运行的容器
f. 删除备份目录(确保验证步骤正常)
rm -rf /var/lib/docker-bak /var/lib/docker
方法二 软链接方式(推荐方式)
操作如下:
a. 停掉docker服务;
systemctl stop docker
b. docker目录备份及软链接;
把docker的存储目录备份,然后再把目录移动到data2/docker_data/docker目录下,操作如下 ;
cp -r /var/lib/docker /var/lib/docker-bak #备份
mv /var/lib/docker /data2/docker_data/ #mv移动
ln -s /data2/docker_data/ /var/lib/docker #软链接
c. 加载和重启docker服务;
systemctl daemon-reload #加载systemd管理器配置
systemctl restart docker #重启docker服务
systemctl enable docker #设置自启动
d. 验证;
验证镜像是否运行正常:
docker images #检查镜像
docker ps #检查运行的容器
e. 删除备份目录(确保验证步骤正常)
rm -rf /var/lib/docker-bak
建议
以上两种方法,第一个方法涉及修改docker原有的配置文件,风险较大,在线上环境不建议;第二个方法,没有涉及原有docker环境的内部配置的修改,对线上环境的服务影响较小,在线上环境建议使用这种方式;