【运维】如何在服务器上启动一个新的 Docker 程序并导出容器

背景

之前由于服务器的根目录空间不够用了,将 Docker 的 data-root 修改到 NAS 存储上,该存储使用了 NFS(Network File System)文件系统。NFS 是一种常见的网络文件系统协议,允许多个客户端共享访问远程文件。但由于其性能和与 Docker 底层存储驱动的兼容性问题,不建议将其用作 Docker 的核心存储位置。

在将 data-root 指定为 NFS 挂载点后,使用 --storage-driver vfs 来启用 Docker 守护进程。这种配置虽然能解决存储问题,但也导致了容器构建和运行的速度极为缓慢。

经过一段时间的使用后,还是将 Docker 的存储位置切回默认的本地存储。现在,我需要在不影响当前正在 Docker 上运行的服务的情况下,将之前在 NAS 上使用的容器导出。

环境

Ubuntu 20.04 + Docker 24.0.6

启动新的 Docker 实例

为了启动新的 Docker 实例,执行以下命令:

touch /tmp/empty-daemon.json # 用于覆盖系统默认的配置文件
sudo dockerd --data-root /nas/docker \
             --storage-driver vfs \
             -H unix:///var/run/docker-alt.sock \
             --config-file /tmp/empty-daemon.json \
             --pidfile /var/run/docker-alt.pid

参数说明:

  • --data-root: 指定 Docker 实例的数据根目录为 NAS 挂载点
  • --storage-driver vfs: 使用 vfs 作为存储驱动,这是由于 NAS 文件系统不支持 Docker 的默认存储驱动。
  • -H unix:///var/run/docker-alt.sock: 指定 Docker 守护进程使用一个新的 Unix 套接字文件 docker-alt.sock,以避免与现有的 Docker 实例冲突。
  • --config-file /tmp/empty-daemon.json: 使用一个空的配置文件,确保不会加载默认的配置,以避免参数冲突。
  • --pid-file /var/run/docker-alt.pid: 将新的 Docker 守护进程的 PID 存储在指定的文件中,以便与默认的 Docker 进程区分开来。

启动结果验证

运行以下命令能看到 Docker Root Dir 已经换成之前的存储位置了

docker -H unix:///var/run/docker-alt.sock info

导出容器

1. 导出容器为镜像

docker -H unix:///var/run/docker-alt.sock commit <container-id> <new-image-name>

2. 导出镜像

docker -H unix:///var/run/docker-alt.sock save -o <output-file.tar> <new-image-name>

3. 导入镜像

sudo docker load -i <input-file.tar>

4. 重新创建容器

docker run -d <new-image-name>

总结

通过这些步骤,能够在不影响现有服务的情况下完成容器的迁移。希望本文提供的解决方案对你在处理类似问题时有所帮助,让你能够顺利地管理和迁移 Docker 容器。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值