【Docker+Windows】データ保存先の変更

# はじめに

Dockerをドカドカ使っているうちに、Dockerさん容量的に邪魔なのでどっかに移動してもらえませんか？ということが発生した時のための記録です。

「Docker」「保存先」「変更」あたりの言葉で検索すれば色々出てきますが、こういった情報はたくさんあって悪いものではないでしょう・・・ということで記します。

# ご注意

このドキュメントをアップするにあたって３回ほど実験しましたが、世に数多ある環境全てで検証したわけではありません。長期の検証をしたわけではありません。
大事なコンテナがなくなった！をはじめ、あらゆることに責任を持てませんので自己責任でお願いします。
（少なくとも私は試してみるにあたりDocker Desktopを再インストールするネタを踏みました。。）

# 対象と今回の検証環境

今回はWindows向けということで。

以下、検証環境です。(多少のバージョン違いであれば特に差違はないと思いますが、あくまでも無保証で。）

Windows10のバージョンは以下。
``` :コマンドプロンプト
winver
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/0c7729e2-677a-913d-0e0b-573dd4f95c2e.png)

WSL2です。
``` :コマンドプロンプト
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/837dd6a2-e0eb-10d0-6cc5-5af65cb6eb97.png)

Docker Desktopを使用。
Dockerのバージョンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/1a14f6ed-93ea-877a-27ad-be22832d5e4e.png)


# 概要

以下のような手順で行います。

1. Dockerのイメージ保存場所を確認する
1. ※ここで大事な決断：コンテナが入っているほうのイメージだけ移動しよう
1. Dockerを停止する
1. Dockerのイメージファイルをエクスポートする
1. DockerをWSLから削除する
1. DockerのイメージをWSLにインポートする
1. Dockerを起動する
1. お片付け

具体的には
C:\Users\\(user)\AppData\Local\Docker\wsl にあるデータを
D:\Docker\wslに移動する想定で話を進めます。

# Dockerのイメージ保存場所を確認する

Docker Desktopインストール直後のDockerのイメージの格納先は %LOCALAPPDATA%\Docker\wsl です。

ひとまず場所を確認しましょう。
``` :コマンドプロンプト
echo %LOCALAPPDATA%
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/d12032a7-d6bd-9482-4dae-fe4c35c4c18e.png)

「distro」と「data」フォルダーがあります。
どちらの中にも「ext4.vhdx」という仮想イメージが入っていますが、
「distro」のほうがDockerを動かしているイメージ、「data」のほうが具体的にコンテナが入っている仮想イメージになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/beed9300-2b8f-96cd-36ff-71b35624aeac.png)

# ※ここで大事な決断：コンテナが入っているほうのイメージだけ移動しよう

このドキュメントの意義はここになるかもしれません・・・。

結果「data」「distro」両方移動できたんですが、なぜか%LocalAppData%のほうに「distro」だけイメージの保存場所が戻り、Docker Desktopを再起動したらDocker起動せず orz ⇒ Docker Desktopを再インストールするハメに。

今回の目的は「保存する場所が足りないから移動したいぜ！」なので、コンテナの入っているほうのイメージだけ移動できればヨシ！ということで「data」の中身だけ移動することとします。

原因が特定でき次第ドキュメントの更新は行いたいですが、今のところ不明です。。

※もう全部移動したくない？と思ったものの、ググった結果dataのみ移動の記載もチラホラだったので、ひょっとして同じケースにハマった方々だったのかも？と今更ながら思いました。（感想文）

# Dockerを停止する。

タスクトレイにいるDocker Desktopアイコンを右クリック⇒コンテキストメニュー⇒「Quit Docker Desktop」でDocker停止。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/1cf14d4c-35d2-11c1-ac06-ee9ca0b5d1c3.png)

docker-desktop(Dockerご本尊)、docker-desktop-data(コンテナが入っているほう)が停止していることを確認します。
``` :コマンドプロンプト
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/e42abd58-6cda-2e9c-e8d7-b0bcdd197d6b.png)

# Dockerのイメージファイルをエクスポートする

容量的に限界なCドライブを見限り、Dドライブに移動する・・・というシナリオで進めます。

とりあえず「D:\Docker\wsl」に「data」のフォルダーを作って、こちらに移動しす。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/46dd098b-02cd-ef00-6294-93e6722b775a.png)



コンテナの数次第では結構時間かかると思います。
``` :コマンドプロンプト
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にインポートする

フルパスでイメージを指定ではなく、ディレクトリ指定とファイル名指定が別れているのでご注意を。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/dc0575ee-9787-f0dd-3332-db128fba83b2.png)
またWSL2なので「--version 2」を付けるところが肝です。
``` :コマンドプロンプト
wsl --import docker-desktop-data D:\Docker\data\ docker-desktop-data.tar --version 2
```

``` :コマンドプロンプト
wsl -l -v
```

docker-desktop-dataが再登録されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/0bd2673a-1f39-54ed-b180-f2367390743c.png)

# Dockerの起動

お好きな方法で。（私は素直にDocker Desktopを起動。）


動作の確認。docker-desktopとdocker-desktop-dataがRunningになっていれば起動成功。
``` :コマンドプロンプト
wsl -l -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/64e8187f-24d3-3c60-23fb-8b204750319f.png)

# お片付け

登録が終わればtarはお役御免なので削除してもOKです。（しばらく不安がある時＆ストレージに余裕があるなら、しばらく残してもよいでしょう。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138460/50ffe6a9-f31c-96e6-470c-ac998b55cdaa.png)


# 最期に

「Docker」「保存先」「変更」あたりの言葉で検索すれば何か出てくるだろう・・・おっけーおっけー、と軽いノリでできたのも、先んじて色々書いていただいた方のおかげ、感謝です。

## 参考

1. [WSL2 Dockerのイメージ・コンテナの格納先を変更したい (WSL2のvhdxファイルを移動させたい)](https://qiita.com/neko_the_shadow/items/ae87b2480345152bc3cb)
1. [【Windows】 Dockerイメージの保存場所を変更する方法](https://e-penguiner.com/change-location-of-docker-on-windows/)
1. [WSL2のLinuxおよびDockerイメージ格納先を任意のディレクトリに移動する](https://www.meganii.com/blog/2021/07/11/move-the-destination-of-wsl2-linux-and-docker-image-container-to-another-directory/)
1. [WSL Docker のデータ保存場所を変更する](https://qiita.com/takelushi/items/94862caf2933275a02f7)
1. [標準機能だけでWSLを好きな場所にインストールする](https://qiita.com/yamada6667/items/9e73193b0167cba2351d)
1. [Docker Desktop for Windows のデータを別のドライブに移動する](https://chizuwota.net/wsl/wsl2-move-docker-vdisk/)