はじめに
Dockerをドカドカ使っているうちに、Dockerさん容量的に邪魔なのでどっかに移動してもらえませんか?ということが発生した時のための記録です。
「Docker」「保存先」「変更」あたりの言葉で検索すれば色々出てきますが、こういった情報はたくさんあって悪いものではないでしょう・・・ということで記します。
ご注意
このドキュメントをアップするにあたって3回ほど実験しましたが、世に数多ある環境全てで検証したわけではありません。長期の検証をしたわけではありません。
大事なコンテナがなくなった!をはじめ、あらゆることに責任を持てませんので自己責任でお願いします。
(少なくとも私は試してみるにあたりDocker Desktopを再インストールするネタを踏みました。。)
対象と今回の検証環境
今回はWindows向けということで。
以下、検証環境です。(多少のバージョン違いであれば特に差違はないと思いますが、あくまでも無保証で。)
Windows10のバージョンは以下。
winver
WSL2です。
wsl -l -v
Docker Desktopを使用。
Dockerのバージョンです。
概要
以下のような手順で行います。
- Dockerのイメージ保存場所を確認する
- ※ここで大事な決断:コンテナが入っているほうのイメージだけ移動しよう
- Dockerを停止する
- Dockerのイメージファイルをエクスポートする
- DockerをWSLから削除する
- DockerのイメージをWSLにインポートする
- Dockerを起動する
- お片付け
具体的には
C:\Users\(user)\AppData\Local\Docker\wsl にあるデータを
D:\Docker\wslに移動する想定で話を進めます。
Dockerのイメージ保存場所を確認する
Docker Desktopインストール直後のDockerのイメージの格納先は %LOCALAPPDATA%\Docker\wsl です。
ひとまず場所を確認しましょう。
echo %LOCALAPPDATA%
「distro」と「data」フォルダーがあります。
どちらの中にも「ext4.vhdx」という仮想イメージが入っていますが、
「distro」のほうがDockerを動かしているイメージ、「data」のほうが具体的にコンテナが入っている仮想イメージになります。
※ここで大事な決断:コンテナが入っているほうのイメージだけ移動しよう
このドキュメントの意義はここになるかもしれません・・・。
結果「data」「distro」両方移動できたんですが、なぜか%LocalAppData%のほうに「distro」だけイメージの保存場所が戻り、Docker Desktopを再起動したらDocker起動せず orz ⇒ Docker Desktopを再インストールするハメに。
今回の目的は「保存する場所が足りないから移動したいぜ!」なので、コンテナの入っているほうのイメージだけ移動できればヨシ!ということで「data」の中身だけ移動することとします。
原因が特定でき次第ドキュメントの更新は行いたいですが、今のところ不明です。。
※もう全部移動したくない?と思ったものの、ググった結果dataのみ移動の記載もチラホラだったので、ひょっとして同じケースにハマった方々だったのかも?と今更ながら思いました。(感想文)
Dockerを停止する。
タスクトレイにいるDocker Desktopアイコンを右クリック⇒コンテキストメニュー⇒「Quit Docker Desktop」でDocker停止。
docker-desktop(Dockerご本尊)、docker-desktop-data(コンテナが入っているほう)が停止していることを確認します。
wsl -l -v
Dockerのイメージファイルをエクスポートする
容量的に限界なCドライブを見限り、Dドライブに移動する・・・というシナリオで進めます。
とりあえず「D:\Docker\wsl」に「data」のフォルダーを作って、こちらに移動しす。
コンテナの数次第では結構時間かかると思います。
wsl --export docker-desktop-data D:\Docker\data\docker-desktop-data.tar
DockerをWSLから削除する
以下のコマンドを叩くと、WSLからdocker-desktop-dataの登録が削除されます。
※注意:%LocalAppData%Docker\wsl\data内部の.vhdxも実際に削除されます。
wsl --unregister docker-desktop-data
docker-desktop-dataの登録が削除されていることを確認。
wsl -l -v
DockerのイメージをWSLにインポートする
フルパスでイメージを指定ではなく、ディレクトリ指定とファイル名指定が別れているのでご注意を。
またWSL2なので「--version 2」を付けるところが肝です。
wsl --import docker-desktop-data D:\Docker\data\ docker-desktop-data.tar --version 2
wsl -l -v
Dockerの起動
お好きな方法で。(私は素直にDocker Desktopを起動。)
動作の確認。docker-desktopとdocker-desktop-dataがRunningになっていれば起動成功。
wsl -l -v
お片付け
登録が終わればtarはお役御免なので削除してもOKです。(しばらく不安がある時&ストレージに余裕があるなら、しばらく残してもよいでしょう。)
最期に
「Docker」「保存先」「変更」あたりの言葉で検索すれば何か出てくるだろう・・・おっけーおっけー、と軽いノリでできたのも、先んじて色々書いていただいた方のおかげ、感謝です。