まえおき
ウェブ制作環境を作るのに、Docker Desktopはとても便利。
正直これがない環境がないと無理ってくらいにはずぶずぶな状態。
ところが1つこれには重大な問題があって、執拗にCドライブへとインストールしてこようとする。
最近のパソコンはCドライブをSSDで構築することが多いけれども、そこにDockerが大量のR/Wを行ってしまうと一気に寿命を縮めてしまう。
実際瀕死状態にまで行ったぞMicrosoftよ。
これはパソコンの買い換えを迫る姑息な戦略なのかと疑いたくなる。
解決策はないかとネット検索をすると、同様にこの問題には苦労している人が見つかるし、解説記事もすぐに見つかる。
のだが、これはDocker Desktopのバージョンに強く依存する。
過去バージョンではうまく行っていた解決方法でも、Docker Desktopのバージョンアップに伴いその方法を使えなくしてしまい、別の方法を探さないとまたCドライブにインストールされる。
もはや執念としか言いようがない。
今回は下の環境でうまく行った方法を記す。
- Docker Desktop 4.29.0
- Windows 11 Home (x64)
またMicrosoftが妨害してきたらごめん。
アンインストール
まだDocker Desktopをインストールしていないパソコンなら、「アンインストール」項目を飛ばしてもよい。
まずはDocker Desktopをアンインストールする。
コンテナなどを退避させたい場合、適宜バックアップを取っておくこと。
バックアップの手順
- クリック「Windowsボタン」
- クリック「アプリ、設定、ドキュメントの検索」
- 文字入力「コントロールパネル」
- クリック「コントロール パネル」
- クリック「プログラムと機能」
- リストからクリックして選択「Docker Desktop」
- クリック「アンインストール」
フォルダの削除
既存フォルダが邪魔になるので削除する。
- C:\ProgramData\Docker
- C:\ProgramData\DockerDesktop
- C:\Users\【ユーザー名】\AppData\Local\Docker
ターミナルからでなく、エクスプローラーからフォルダ削除を行う場合。
フォルダ名は「Users」でなく「ユーザー」という名前になっているので要注意。
ダウンロード
公式サイトのリリースノートから、インストールに必要なファイルをダウンロードして保存する。
まだ実行せずに、保存だけしておく。
リリースノートページ:https://docs.docker.com/desktop/release-notes/
基本的には最新バージョンで構わないはずだが、何か理由があるのなら別のものを落としてきても大丈夫と思う。
フォルダの作成
D:\DockerDataフォルダを作成して、ダウンロードしてきたファイルを移動させてくる。
今回は上記フォルダに全てのDocker Desktop関連のファイルデータを突っ込む予定だが、別のフォルダがいい場合は適宜読み替えること。
基本的には上記フォルダで完結するが、WSLの設定ファイルのみ例外。
詳細は最後で言及する。
追加でフォルダを2つ作成。
- D:\DockerData\ProgramData_DockerDesktop
- D:\DockerData\User_AppData_Local_Docker
役割はフォルダ名の通り。
- C:\ProgramData\DockerDesktop
- C:\Users\【ユーザー名】\AppData\Local\Docker
それぞれの中身の代わりとなることを明示した。
インストール
一旦は通常のインストールを行って、Docker Desktopが動く状態を作っておく。
Cドライブから別のドライブへと繋ぎ変えるのはその後で行う。
コマンドプロンプトを管理者として実行。
カレントディレクトリを「D:\DockerData」まで移動させてから次を実行する。
start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir=D:\DockerData\ProgramData_DockerDesktop --wsl-default-data-root=D:\DockerData\ProgramData_DockerDesktop
インストールが終わって、正常にDocker Desktopが起動することを確認。
そしてさらに、コマンドプロンプト経由でインストールした時の設定内容(イメージの保存先を変更するように設定してある)が機能しているかも確認する。
- クリック「設定」(歯車アイコン)
- クリック「Resources」
- 確認内容「Disk image location」
- 「D:\DockerData\ProgramData_DockerDesktop」になっているかどうか
正常にインストールが完了しているなら、Docker Desktopを終了する。
さらにタスクバーからDocker Desktopのアイコンを右クリックして、「Quit Docker Desktop」を選択。
バックエンドで走っているDocker Desktopのプロセスも終了させる。
ローカルデータの移動
ここからがCドライブからのお引越し。
フォルダの中身をごっそり移動させる。
- 移動元:C:\Users\【ユーザー名】\AppData\Local\Docker
- 移動先:D:\DockerData\User_AppData_Local_Docker
移動が終わったら、Cドライブにあった移動元のデータをフォルダごと削除。
ジャンクションの作成
Windows PowerShellを管理者として実行。
カレントディレクトリを移動させなくてもいいので、次を実行する。
mklink /j C:\Users\【ユーザー名】\AppData\Local\Docker D:\DockerData\User_AppData_Local_Docker
ジャンクションとはシンボリックリンクのようなもの。
フォルダアイコンはシンボリックリンク同様、フォルダに矢印が加えられた図形になる。
削除は通常のフォルダと同様、rmdirコマンドで実行可能。
解説記事:https://atmarkit.itmedia.co.jp/ait/articles/1306/07/news111.html
環境変数の設定
環境変数の設定を行うダイアログウィンドウを開く。
- クリック「Windowsボタン」
- クリック「設定」
- クリック「システム」
- クリック「バージョン情報」
- クリックしてダイアログウィンドウを開く「システムの詳細設定」
- タブを選択「詳細設定」
- クリックしてダイアログウィンドウを開く「環境変数」
- リストからクリックして選択「Path」
- ユーザー環境変数の方から選択する
- クリックしてダイアログウィンドウを開く「編集」
「新規」をクリックして、次のフォルダパスを入力して、環境変数への追加を行う。
D:\DockerData\ProgramData_DockerDesktop\resources\bin
docker.exeへのリンクパスを張っている。
リストの最末尾に追加されていることを確認。
「OK」を3回クリックして、環境変数の登録が完了。
パソコンの再起動
CドライブからDocker Desktopを追い出す設定は完了した。
環境変数の変更を有効化するために、パソコンを再起動する。
最終確認
Docker Desktopを起動。
何か適当なDockerコンテナをビルドしてみて、実際にCドライブでなく別のドライブを使うように切り替えられているかを確認する。
C:\DockerDesktopの中身が、インストール直後の状態から変わっていないかどうか
- 新しくファイルやフォルダが作られていないかどうか
- ファイルやフォルダの更新日時が変わっていないかどうか
C:\Users\【ユーザー名】\AppData\Local\Dockerに異常はないか
- アイコン画像がジャンクションのままで残っているかどうか
D:\DockerDataのフォルダが更新されているか
- 「ProgramData_DockerDesktop」フォルダと「User_AppData_Local_Docker」フォルダの中身のファイルの更新日時が変わっているのなら問題なし
メモリ設定(WSL)
移行処理は完了したが、WindowsでWSLを使っている場合の注記。
メモリ使用率やCPUコア数の割り当て上限量を変更したい場合、その設定はDocker DesktopやD:\DockerDataフォルダにはない。
Mac版の場合、Docker Desktopの中に設定項目がある。
設定ファイルの場所は下記だが、存在しない場合は新規作成すること。
- C:\Users\【ユーザー名】\.wslconfig
設定ファイルを変更した場合、パソコンの再起動が必要になる。