侧边栏壁纸
  • 累计撰写 88 篇文章
  • 累计创建 41 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Docker 数据迁移

已删除用户
2022-10-13 / 0 评论 / 0 点赞 / 135 阅读 / 0 字

本地以两个 Ubuntu Server 22.04.1 虚拟机为例,分别为 A、B,并将 A 中的 hello-world 镜像迁移到 B 的 Docker 中。

环境准备

克隆两个虚拟机,分别设置 IP 为 192.168.137.151192.168.137.152

# 修改网络配置文件
$ sudo vim /etc/netplan/00-installer-config.yaml

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens33:
      # IP
      addresses:
      - 192.168.137.151/24
      # 过期的网关配置
      # gateway4: 192.168.137.2
      # 网关
      routes:
      - to: default
        via: 192.168.137.2
      # DNS
      nameservers:
        addresses:
        - 114.114.114.114
        - 8.8.8.8
        search: []
  version: 2

# 更新网络配置
$ sudo netplan apply

然后安装 Docker 和镜像、容器:

# 安装依赖
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# 安装 GPG 证书
$ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 添加软件源仓库
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 安装 docker
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

# 将当前用户添加到 docker 组中,后续运行就无需 sudo 开头
$ sudo gpasswd -a username docker
# 更新 docker 用户组
$ newgrp docker

# A 服务器:运行 hello-world(会自动 pull 并 run)
$ sudo docker run hello-world
Hello from Docker!
……

容器迁移

A 服务器

# 查看所有容器
$ docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED       STATUS                   PORTS     NAMES
fc1ca561603c   hello-world   "/hello"   2 hours ago   Exited (0) 2 hours ago             busy_haibt

# 提交容器变更,并将其保存为镜像
$ docker commit fc1ca561603c bakimage
sha256:de196a3e36e29bdfbe374250986713c6a109d1865592a9b6bd0747e01ea4ace0

# 将镜像保存为 tar 文件
$ docker save bakimage > /tmp/bakimage.tar
# 将 tar 文件移动到 B 服务器中,可使用 FTP、SCP 等
$ scp /tmp/bakimage.tar username@192.168.137.152:/tmp

# 安装查看容器启动命令的软件
$ pip install runlike
# 将 pip 安装目录添加到环境变量
$ export PATH="$HOME/.local/bin:$PATH"

# 查看容器的启动命令
$ runlike -p fc1ca561603c
docker run \
        --name=busy_haibt \
        --hostname=fc1ca561603c \
        --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
        --restart=no \
        --runtime=runc \
        hello-world \
        /hello

B 服务器

# 加载镜像
$ docker load < /tmp/bakimage.tar
# 查看导入的镜像
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
bakimage     latest    c2c30d20bf60   1 minutes ago   13.3kB

# 重命名镜像
$ docker tag c2c30d20bf60 hello-world
# 删除多余的镜像
$ docker rmi bakimage

# 按照 A 服务器中此容器的启动命令来启动即可,如果有 --volume 的话,需要将 A 服务器中对应的目录也拷贝过来
$ docker run \
        --name=busy_haibt \
        --hostname=fc1ca561603c \
        --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
        --restart=no \
        --runtime=runc \
        hello-world \
        /hello

Hello from Docker!
……

参考

0

评论区