14

在 DockerCon 2020 之后,我热情地下载了 Windows 10 2004 并尝试将 Docker Desktop 升级到 WSL 2 容器并进行实验。

我有几个容器,特别是几个数据库以及它们存储在卷中的数据。以 Postgres 和 MS SQL Server 为例。

我不想丢失数据,尽管这并不重要。我使用 Docker 卷而不是 OS 挂载,因为我反复看到建议使用 Windows 挂载来存储数据库数据。

当我第一次启用 WSL-2 时,我所有的容器和卷都消失了。

我想问一下是否有任何(推荐的)程序或工具可以将基于 Hyper-V 的容器连同它们的数据一起迁移到 WSL-2。

图像可以很容易地重新下载。容器设置和数据迁移到 WSL-2 怎么样?

当然,我可以手动完成。我可以busybox使用另一个busybox实例将卷转储到我的本地驱动器(作为tar)并恢复

4

1 回答 1

9

当然,这里是我的经验分享。

重构 dockerrun语法

首先,您需要记住或重构启动容器的语法,以便稍后重新运行它们。这个想法是从现有容器中收集尽可能多的信息以重新运行它们

这是一个很好的起点

##迁移卷

这介于易于执行和长时间运行的任务之间。容易,因为我只需要一个容器,冗长而乏味,因为它需要多个命令

docker run `
           --rm ` #Dispose after use
           -v G:\Docker:/volumes ` # Mount my Windows drive so that the file will appear in Explorer
           - v src_mount:/src ` # e.g. mssql2017:/mssql2017 mounts mssql2017 named volume to Busybox
           busybox `
           tar -zcvf /volumes/backup_name.tar.gz /src

冲洗并重复您感兴趣的所有命名卷。我只有一堆

转储您将无法/愿意重建的图像

就我而言,Oracle 12c/19c 已构建但从未推送。构建 Oracle 很痛苦,因为您必须在下载许可的 ZIP 文件后构建容器

docker save -o明智地使用。例子

docker save oracledb:12.0.0.0c -o oracledb.img

##恢复图片

切换到 WSL-2 后,docker load明智地使用

恢复卷

docker volume create使用busybox手动重新创建所有卷并解压缩。这是一种反转

docker run `
       --rm ` #Dispose after use
       -v G:\Docker:/volumes ` # Mount my Windows drive so that the file will appear in Explorer
       - v dest_mount:/dest ` # e.g. mssql2017:/mssql2017 mounts mssql2017 named volume to Busybox
       busybox `
       tar -zxvf /volumes/backup_name.tar.gz /dest

恢复容器

现在您有了源 Docker 命令行-s,启动它们以重新创建容器。

结论:我正在考虑制作一个可重用的 Powershell 脚本

于 2020-06-01T12:43:27.153 回答