Windows11でDocker Desktopを使わずにDocker
2023年01月31日 火曜日
CONTENTS
こんにちは、九州支社技術部(九州・中四国事業部)所属のy-morimotoです。
Windows 10のサポート期限がじわじわと近づいてきており、そろそろWindows 11を使ってみようという事で、
Docker Desktopを使わずにWindowsでDockerを、Windows 11でもやってみました。
(弊社、Docker Desktopライセンスは普通に購入しているのですが、まあそれはそれという事で…)
1.どうやるの?
Windows 10の時と同様で「WSLのUbuntuでDockerを動かす」です。
ただ、導入手順は随分とシンプルになっていました。
【参考】過去の導入手順(Windows 10)
2.導入手順
では、さっそくやっていきましょう。
- CPU仮想化支援機能の確認
タスクマネージャーからCPU仮想化支援機能の有効を確認します。
有効では無い場合はBIOSの設定などを見直します。
- 仮想マシンプラットフォームの有効化
Windowsの機能の有効化または無効化から[仮想マシンプラットフォーム]を有効化します。
ここで再起動を促されたら、従ってWindowsを再起動します。
- WSLとUbuntu(とWindows Terminal)のインストール
Microsoft StoreからWSLとUbuntuを検索してインストールします。
Windows Terminalは操作不要で、WSLをインストールすると自動でインストールされました。
Ubuntuはバージョンを指定したい場合は、バージョン付きの物を選択しても良いです。
- Windows Terminalを起動
以降は、Windows Terminalで作業します。
検索でターミナルを開き、開いたらプルダウンメニューからUbuntuを選択します。
ターミナルはすぐに開けるように、タスクバーのアイコンを右クリックして、ピン留めしておくと良いです。
- Ubuntuの初期設定
Ubuntuを開くと、Installがはじまるのでしばらく待ちます。
ユーザ名とパスワードの入力が表示されたら入力し、コマンド入力可能な状態になったら準備完了です。
ユーザ名とパスワードはWindowsと別設定ですが、同じものを設定する事も可能です。
- systemdの有効化
systemdを有効化する為、以下のコマンドで /etc/wsl.conf を作成しますecho "[boot] systemd=true" | sudo tee /etc/wsl.conf cat /etc/wsl.conf
設定反映の為、WSLをシャットダウンします。
wsl.exe --shutdown
- Ubuntuを再度開く
Ubuntuが停止したら、プルダウンメニューから再度Ubuntuを開きます。
Ctrl+Shift+4のショートカットでも開けます。
- Dockerのインストール
公式の手順を参考にDockerをインストールします。
https://docs.docker.com/engine/install/ubuntu/
以下要約です。(docker-compose-pluginもインストールする手順になっています)sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-compose-plugin
- Dockerを起動
dockerをsystemdにサービス登録し、起動を確認します。
自動で起動しているので、startは不要です。sudo systemctl enable docker sudo systemctl status docker
- dockerグループへの追加
自分のアカウントでdockerコマンドが使えるようにグループに追加します。
以下の例ではy-morimotoをdockerグループに追加しています。自身のアカウントに変更して実行してください。sudo usermod y-morimoto -aG docker id y-morimoto
- 動作確認
自分のアカウントのグループが反映されるよう、プルダウンメニューから再度Ubuntuを開きます。
自分がdockerグループ所属になったことを確認して、いろいろコマンドを実行できたら終わりです。id docker version docker run hello-world
3.あとがき
過去の記事をご存知の方は、随分と手順が変わったなと思われたのではないでしょうか。
- WSLはMicrosoft Storeからインストール出来るようになった
- Docker Compose Pluginはaptからインストール出来るようになった
- WSLでsystemdが使えるようになった
主にWSL関連ではありますが、かなりシンプルに環境準備できるようになりました。
systemdが利用可能になった点は、とても大きいと感じています。
dockerに限らず、WSL活用の幅が広がりそうです。
4.おまけ
過去記事からのコピペですが、地味にハマるところなのでこちらにも。
- Docker bridge networkのIPアドレス帯変更
Docker bridge network (docker0)が、WSLやLANのIPアドレス帯と重複する場合があります。
その場合、コンテナと重複したIPアドレス帯が通信できない為、docker0のIPアドレス帯を変更します。
(WSLとDockerはどちらも「172.16.0.0~172.31.255.255」を使うので地味に重複します)
「/etc/docker/daemon.json」(なければ新規作成する)を設定する事で、IPアドレス帯を変更できます。
以下が設定例です。(この場合、192.168.128.0/24のネットワークとなり、192.168.128.254 がgw になります){ "bip": "192.168.128.254/24", "fixed-cidr": "192.168.128.0/24" }
ファイルを設置した後は「sudo service docker restart」でDockerを再起動する事で反映されます。
- コンテナ向けのproxy設定
Windowsのproxy設定はdockerコンテナに反映されません。
コンテナのENVにhttp_proxyを都度設定する方法もありますが、「~/.docker/config.json」に設定しておくと自動設定されます。
以下が設定例です。(proxy.your.domain:8080にはお使いのproxyサーバとportを設定してください){ "proxies": { "default": { "httpProxy": "http://proxy.your.domain:8080", "httpsProxy": "http://proxy.your.domain:8080" } } }