Windows11でDocker Desktopを使わずにDocker

2023年01月31日 火曜日


【この記事を書いた人】
y-morimoto

九州支社技術部(九州・中四国事業部)所属。自作パソコン好きで、ハードウェア選定の仕事を与えると喜ぶ。最近は何でもコンテナにしたい教に入信し、コンテナ化の機会を虎視眈々と狙っている。

「Windows11でDocker Desktopを使わずにDocker」のイメージ

こんにちは、九州支社技術部(九州・中四国事業部)所属のy-morimotoです。

Windows 10のサポート期限がじわじわと近づいてきており、そろそろWindows 11を使ってみようという事で、
Docker Desktopを使わずにWindowsでDockerを、Windows 11でもやってみました。
(弊社、Docker Desktopライセンスは普通に購入しているのですが、まあそれはそれという事で…)

1.どうやるの?

Windows 10の時と同様で「WSLのUbuntuでDockerを動かす」です。
ただ、導入手順は随分とシンプルになっていました。
【参考】過去の導入手順(Windows 10)

2.導入手順

では、さっそくやっていきましょう。

  1. CPU仮想化支援機能の確認
    タスクマネージャーからCPU仮想化支援機能の有効を確認します。
    有効では無い場合はBIOSの設定などを見直します。

  2. 仮想マシンプラットフォームの有効化
    Windowsの機能の有効化または無効化から[仮想マシンプラットフォーム]を有効化します。
    ここで再起動を促されたら、従ってWindowsを再起動します。

  3. WSLとUbuntu(とWindows Terminal)のインストール
    Microsoft StoreからWSLとUbuntuを検索してインストールします。
    Windows Terminalは操作不要で、WSLをインストールすると自動でインストールされました。
    Ubuntuはバージョンを指定したい場合は、バージョン付きの物を選択しても良いです。

  4. Windows Terminalを起動
    以降は、Windows Terminalで作業します。
    検索でターミナルを開き、開いたらプルダウンメニューからUbuntuを選択します。
    ターミナルはすぐに開けるように、タスクバーのアイコンを右クリックして、ピン留めしておくと良いです。

  5. Ubuntuの初期設定
    Ubuntuを開くと、Installがはじまるのでしばらく待ちます。
    ユーザ名とパスワードの入力が表示されたら入力し、コマンド入力可能な状態になったら準備完了です。
    ユーザ名とパスワードはWindowsと別設定ですが、同じものを設定する事も可能です。

  6. systemdの有効化
    systemdを有効化する為、以下のコマンドで /etc/wsl.conf を作成します

    echo "[boot]
    systemd=true" | sudo tee /etc/wsl.conf
    cat /etc/wsl.conf

    設定反映の為、WSLをシャットダウンします。

    wsl.exe --shutdown

  7. Ubuntuを再度開く
    Ubuntuが停止したら、プルダウンメニューから再度Ubuntuを開きます。
    Ctrl+Shift+4のショートカットでも開けます。

  8. 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

  9. Dockerを起動
    dockerをsystemdにサービス登録し、起動を確認します。
    自動で起動しているので、startは不要です。

    sudo systemctl enable docker
    sudo systemctl status docker

  10. dockerグループへの追加
    自分のアカウントでdockerコマンドが使えるようにグループに追加します。
    以下の例ではy-morimotoをdockerグループに追加しています。自身のアカウントに変更して実行してください。

    sudo usermod y-morimoto -aG docker
    id y-morimoto

  11. 動作確認
    自分のアカウントのグループが反映されるよう、プルダウンメニューから再度Ubuntuを開きます。
    自分がdockerグループ所属になったことを確認して、いろいろコマンドを実行できたら終わりです。

    id
    docker version
    docker run hello-world

3.あとがき

過去の記事をご存知の方は、随分と手順が変わったなと思われたのではないでしょうか。

  • WSLはMicrosoft Storeからインストール出来るようになった
  • Docker Compose Pluginはaptからインストール出来るようになった
  • WSLでsystemdが使えるようになった

主にWSL関連ではありますが、かなりシンプルに環境準備できるようになりました。
systemdが利用可能になった点は、とても大きいと感じています。
dockerに限らず、WSL活用の幅が広がりそうです。

4.おまけ

過去記事からのコピペですが、地味にハマるところなのでこちらにも。

  1. 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を再起動する事で反映されます。

  2. コンテナ向けの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"
        }
      }
    }

y-morimoto

2023年01月31日 火曜日

九州支社技術部(九州・中四国事業部)所属。自作パソコン好きで、ハードウェア選定の仕事を与えると喜ぶ。最近は何でもコンテナにしたい教に入信し、コンテナ化の機会を虎視眈々と狙っている。

Related
関連記事