WindowsでDockerを使って開発してる現場を見てると、大体みんな困ってます。
- Docker使ってWordPress動かすと、すごーーーく遅い。
- Docker使ってLaravelアプリを開発してるけど、Viteが遅すぎ。
- Linux使えって言われても、会社のPCがWindowsだもん!Excelもいるし。
今回はこんなお悩みを簡単に解決していきます。(Windows11環境にて)
TL;DR
Windows上のUbuntuからDocker使え。
- WindowsにWSL入れる。(コマンド1個)
- WindowsにUbuntu入れる。(ストアでポチる)
- Ubuntu用フォルダにプロジェクト配置。(普通にエクスプローラで)
- Visual Studio Codeでプロジェクトを開いて、Dockerスタート!
仕組み(何をしようとしているか)
WindowsでDocker使って仮想Linuxサーバー立ててWordPressを動かしてるとき、WSL (Windows Subsystem for Linux)という仮想マシンの仕組みを使ってます。
今使われているWSL2は基本めちゃめちゃ優秀で高速動作するなのです。でも弱点があって遅いので、弱点を回避することにします。
WSL2の弱点
WSL2では、ホストとなるWindowsのファイルシステム(NTFS)と仮想マシンのLinuxのファイルシステム(ext4)でのデータ交換だけ異常な負荷がかかる欠点があります。
図で表すとこんな感じ。(厳密には正確じゃない図だけど)
改善後のイメージ
なので、WSL2の中にUbuntuを入れて、そこからDocker使おうって寸法です。
図で表すとこんな感じ。
必要なもののインストール
Docker Desktop
まだDocker Desktopを入れてない場合は、DockerのサイトからDocker Desktopをダウンロードして入れる。(Intel CPUはAMD64。AMD CPUはAMD64。ARMの場合だけARM64)
このときWSL2を使うようにすべし。
インストール後再起動して進むとWSLを更新インストールさせようとしてくるので、適当にキーを押して進める。
あとは指示に従って進める。
もし「WSLが古すぎる」というエラーが出たら、以下のWSL2のインストールを見てWSLをアップデートする。
WSL2
PowerShellを開けてWSLが入ってるか確認。
wsl -v
まだWSLが入ってない場合は以下になるので、なにかキーを押してインストールを進める。
WSLが入ってたらバージョンが表示される。
WSLをアップデートする。
wsl --update
Ubuntu
WSL2上にUbuntuを入れるのは、Microsoft Storeで「入手」するだけ。Ubuntuはいくつか出てくるけど、「Ubuntu」とだけ表示帰されてるやつがおすすめ。
インストールされたら開く。
デフォルトユーザー設定になる。
これでPowerShellからUbuntuを操作できる。
開発するプロジェクトを置いて起動する
プロジェクト用フォルダをUbuntu内に作成
いつもはマイドキュメントの下などにプロジェクトを置く(Gitクローンしてくる)ところだけど、Ubuntuのユーザーフォルダ内にプロジェクトを置く。Linuxでは、/home/[ユーザー名]
がユーザーフォルダ。
例)
今まで:C:\Users\[ユーザー名]\Documents\DockerProjects\[プロジェクトフォルダ]
今回:\\wsl.localhost\Ubuntu\home\[ユーザー名]\DockerProjects\[プロジェクトフォルダ]
エクスプローラーにLinuxが出てくるので、そこからたどるとわかりやすい。Ubuntuのバージョン版を選んだ場合はパスが少し異なる。
プロジェクトを配置する
今回はLaravel練習用リポジトリをクローンしてきましょう。
PowerShellでUbuntuに入って、
~/DockerProjects
(= /home/[ユーザー名]/DockerProjects
)に移動し、リポジトリをクローン。
git clone https://github.com/hitotch/laravel11-sample-ja.git
Visual Studio Codeでプロジェクトを開く
いつもどおりファオルダを開くで、
\\wsl.localhost
を開いて、
設置したプロジェクトフォルダを選択。
ターミナルを開いて、さらにUbuntuのターミナルを開く。
UbuntuからDockerコンテナを起動する。
Dockerコンテナを起動する。
もしDockerのWSLインテグレーションをオンにせよとエラーが出たら、Dockerで設定をオンにする。
これで高速動作!
ところで
今回のスクリーンショットはすべてLinux Mint上のKVMで走ってるWindows11のものです。
つまり、以下のような二重の仮想化になってます。それでも軽快に動作します。
Ubuntu & Docker内Linux
-仮想化-
Windows11
-仮想化-
Linux Mint