将现有容器从 Hyper-V 迁移到 WSL2 技术

usr*_*ΛΩΝ 14 docker docker-desktop

在 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)并使用另一个busybox实例进行恢复

usr*_*ΛΩΝ 7

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

重构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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

docker save oracledb:12.0.0.0c -o oracledb.img
Run Code Online (Sandbox Code Playgroud)

##恢复图像

切换到 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
Run Code Online (Sandbox Code Playgroud)

恢复容器

现在您拥有源 Docker commandline-s,启动它们以重新创建容器。

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