After DockerCon 2020, I enthusiastically downloaded Windows 10 2004 and tried to upgrade Docker Desktop to WSL 2 containers and experiment.
I had a few containers, in particular a couple of databases along with their data stored within volumes. Postgres and MS SQL Server in the case.
I wouldn't like to lose the data, though it's not critical. I used Docker volumes rather than OS mounts because I have repeatedly seen that using Windows mounts for database data storage is not recommended.
When I enabled WSL-2 for the first time, all my containers and volumes disappeared.
I'd like to ask if there is any (recommended) procedure or tool to mgirate Hyper-V based containers to WSL-2 along with their data.
Images can be easily redownloaded. How about container setup and data migration to WSL-2?
Of course I can do it manually. I can dump the volumes to my local drive (as a tar) using busybox
and restore using another busybox instance
Of course, here is my sharing of experience.
run
syntaxFirst, you need to remember or reconstruct the syntax to start the container to re-run them later. The idea is to collect as much information as possible from existing containers to re-run them
Here is a good starting point
That's between ease of execution and long-running task. Easy because it took me simply one container, long and tedious because it requires multiple commands
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
Rinse and repeat for all named volumes of your interest. I had a bunch only
In my case, Oracle 12c/19c were built but never pushed. Building Oracle is painful becuase you have to build the container after downloading their licensed ZIP file
Use docker save -o
wisely. Example
docker save oracledb:12.0.0.0c -o oracledb.img
After switching to WSL-2, use docker load
wisely
Manually recreate all volumes with docker volume create
and unzip with busybox. This is kind of a reverse
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
Now that you have your source Docker commandline-s, launch them to recreate containers.
Conclusion: I am thinking about making a reusable Powershell script