Docker Desktop なしで WSL2 に Docker Engine をインストールする — 実用上は大混乱
Windows 上の Docker Desktop を使わずに、WSL2 で直接 Docker を実行したいとお考えですか?もちろん可能ですが、必ずしもスムーズとは言えません。すべてを Linux で実行すれば、オーバーヘッドをいくらか削減し、パフォーマンスも向上するかもしれませんが、systemd が正常に動作していること、権限が適切であること、リソースが適切に構成されていることを確認するなど、いくつか注意点があります。これらがうまく動作すれば、WSL ターミナルから直接 Docker コマンドを実行できるようになります。これは一度起動すれば、本当に素晴らしい体験です。ただし、これは完璧な設定ではないことを覚えておいてください。場合によっては、いくつかの調整が必要になる場合があり、すべてがそのまま動作するとは限りません。しかし、調整に問題がなければ、簡単に実現する方法をご紹介します。
基本的に、WSL Linuxディストリビューション内にDocker Engineを直接インストールし、自動的に起動してリソースにアクセスできることを確認することが目標です。これは、Docker Desktopに伴う余分なRAM、ディスク、CPUの消費を避けたい場合や、Linuxコマンドに慣れている場合に役立ちます。WSLではsystemdがデフォルトで有効になっていない場合があるため、セットアップによってはsystemdが正常に動作していることを確認するのが最も面倒な場合があります。しかし、systemdが正常に動作していれば、WindowsのコマンドプロンプトやPowerShellから簡単にコンテナを実行できるかもしれません。Linuxの皆さん、少し変わっているかもしれませんが、軽量なDockerスタックを実現したいのであれば、試してみる価値はあります。それでは、手順を見ていきましょう。
Docker Desktop を使わずに WSL2 に Docker Engine をインストールする方法
WSL2とLinuxディストリビューションが準備できていることを確認してください
– ` ` で WSL のバージョンを確認しますwsl --version。バージョン 2 と表示されているはずです。 – そうでない場合は、` wsl --set-default-version 2` を実行してデフォルトを WSL2 に設定します。 – ` ` でディストリビューションを一覧表示しwsl --list --verbose、Linux (たとえば、Ubuntu 22.04) がバージョン 2 で実行されていることを確認します。 – そうでない場合は、` wsl --set-version Ubuntu-22.04 2` を実行します。
設定によっては、これを忘れてしまう人がいて、後々様々な問題を引き起こします。ですから、まずこれを実行しましょう。
Ubuntuをインストールして、明日がないかのようにアップデートしましょう
wsl– ` ` または ` ` を使用して Linux に接続しますwsl -d Ubuntu-22.04。 – パッケージを更新します: ` `。 – curlやwgetsudo apt update && sudo apt upgrade -yなどのツールがインストールされていることを確認します。インストールされていない場合は、` ` をインストールします。 sudo apt install curl
公式スクリプトでDockerをインストールする – WSLの警告は無視してください
– 実行: ` curl -fsSL https://get.docker.com -o get-docker.sh` then ` sudo sh get-docker.sh。 – このスクリプトはDockerサーバーから必要なものをすべて取得し、自動インストールします。正直に言うと、WSL内での実行に関する警告が時々表示されますが、無視してください。この警告は誤解を招くものです。
ユーザーをDockerグループに追加して、すべてをsudoする必要がないようにする
– 実行: ` sudo usermod -aG docker $USER`。 – 変更を有効にするには、WSL セッションをwsl --shutdown再起動して再度起動する必要がある場合があります: ` `。
この手順により、Docker コマンドの前に `sudo` を頻繁に入力する必要がなくなり、しばらくすると煩わしくなります。(奇妙なことに、グループ メンバーシップがすぐに更新されないことがあるため、WSL を再起動するか、閉じて再度開くと問題が解決します。)
Docker を自動的に起動し、systemd サポートが機能することを確認する
– systemd が有効になっているかどうかを確認するには、` /etc/wsl.conf ` を確認します。これが存在し、次の行が含まれている場合は問題ありません。 [boot] systemd=true – そうでない場合は、` ` で編集または作成し 、sudo nano /etc/wsl.confそのブロックを追加します。 – Linux で systemd が実行されているかどうかを次のように確認します。` /sbin/init ` が ` /lib/systemd/systemd `を指している場合は設定されています。 – Docker サービスを有効にして起動します。` `。 – ステータスを確認します。` `。実行されている場合は問題ありません。`systemd` が実行されていないというエラーが発生する場合は、` ` を調整して強制的に起動するなど、追加の操作が必要になる場合があります。場合によっては、WSL init プロセスで docker を自動的に起動するコマンドを追加する必要があります。` ` を使用して、次の行を追加します。 [boot] command = “/usr/sbin/service docker start” – WSL を再起動し (` `)、再度確認します。 stat /sbin/initsudo systemctl enable --now docker.servicesystemctl status docker.service/etc/wsl.confnano /etc/wsl.confwsl --shutdown
そうですね、WSLでsystemdを管理するのは少し面倒です。systemdはまだ完全にサポートされていないため、手動で起動コマンドを実行する必要がある設定もあります。だからこそ、人々はここで工夫を凝らすのです。
WSL2のリソース制限を構成する
– ファイル ` %UserProfile%\.wslconfig ` を作成し、リソース制限を調整します: ini [wsl2] memory=8GB processors=4 swap=2GB – 次に、WSL を再起動します: ` wsl --shutdown` — 再度起動すると、制限が適用されます。
もちろん、WSLは必要以上に難しくする必要があります。しかし、この方法であれば、意図せずWindowsホストのリソースが枯渇したり、WSLに過剰なリソースを割り当てたりすることはありません(もちろん、そうしたい場合は別ですが)。
WSLでDockerをテストする
– docker run hello-worldWSL 内から ` ` を実行します。 – 小さなテスト イメージがプルされて実行され、挨拶が表示されます。 – Windows から Docker コマンドを実行する場合は、` ` のように` wslwsl docker images ` をプレフィックスとして付けるか、PATH を設定するだけでよりシームレスになります。(ネタバレ: 少し面倒ですが、実行可能です。)
プロのヒント: Docker のファイルは、マウントされた Windows パス内ではなく、WSL のファイルシステム内 (ホーム ディレクトリなど) に保存してください。マウントされた Windows パス内だと、処理速度が低下したり、奇妙なアクセス許可の問題が発生したりする傾向があります。
必要に応じて新しい Linux ファイアウォールの設定を処理する
– 最近のディストリビューションでは、iptables の代わりにnftablesが使用されています。WSL の場合、カーネル 5.8 以降でネイティブにサポートされていますが、動作しない場合は以下をお試しください: ` sudo update-alternatives --config iptables` – 必要に応じて ` iptables-legacy ` を選択してください。
Dockerでネットワークをスムーズに動作させるためだけに、これだけのことをしています。楽しい作業ではありませんが、設定が完了すれば、その価値は十分にあります。
まあ、確かに少し面倒ではありますが、Docker DesktopなしでもWSL2内でDocker Engineを実行することは全く問題ありません。ただし、systemdの有効化、設定の調整、リソース制限などは、プラグアンドプレイとはいかないので、多少の手間は覚悟しておいてください。でも、良い点は?リソースの消費が少なく、よりLinuxネイティブな設定ができることです。ある設定ではかなりスムーズに動作しましたが、別の設定ではいくつか調整が必要でした。それほど大変な作業ではありませんが、少しの忍耐力が必要でした。
まとめ
- WSL2が有効になっており、ディストリビューションが正しく設定されていることを確認してください。
- 公式スクリプトを使用してDockerを更新およびインストールする
- WSLでsystemdサポートを構成する
- `.wslconfig` でリソース制限を設定する
- WSL内で「docker run hello-world」を使用してDockerをテストする
まとめ
このプロセス全体は少しハックっぽい感じがしますが、Docker Desktopの使用を避けたいのであれば、それだけの価値はあります。特にsystemdのサポートに関しては、多少の試行錯誤は覚悟しておきましょう。しかし、一度うまく動作すれば、WSL2内でのDockerコマンドははるかにシームレスになります。Docker Desktopの余分なオーバーヘッドなしに、このプロセスが誰かの作業効率向上に役立つことを願っています。