Windows コンテナ開発:Podman × WSL × VSCode DevContainers セットアップガイド
Windows コンテナ開発:Podman × WSL × VSCode DevContainers セットアップガイド
1. 概要
この記事では、Windows 上で Podman と Visual Studio Code (VSCode) の Dev Containers 機能を用いて、コンテナベースの開発環境を構築する手順を解説します。Docker Desktop の代替として注目されているPodman を使い、クリーンで再現性の高い開発環境を手に入れることを目指します。
この記事は、以下のバージョン情報を基に作成されています。
- Windows 11 Version 24H2
- WSL Version 2.5.7.0
- Podman Version 5.5.1
- Visual Studio Code Version 1.101.2
- Dev Containers Version 0.418.0
- Container Tools Version 2.0.3
2. Podman
Podman は、Red Hat 社が中心となって開発しているオープンソースのコンテナエンジンです。 Docker と互換性のあるコマンドラインインターフェースを提供し、デーモンレスアーキテクチャを特徴としています。 root 権限なしでコンテナを実行できる(rootless)モードにより、セキュアなコンテナ環境を提供します。
2.1 Podman Desktop / CLI
Podman には、以下の2つのコンポーネントが提供されています。
- Podman Desktop: Podman を GUI で管理できるデスクトップアプリケーションで、 Podman CLI も含まれています。
- Podman CLI: コンテナのライフサイクル全般を管理するコマンドラインツールです。
Podman は Docker 互換のコマンドラインインターフェースを提供しており、多くの基本的な
docker
コマンドはpodman
に置き換えるだけで動作します。そのため、既存の Docker の知識を活かしやすいのが大きなメリットです。
2.2 Podman バックエンド(WSL2 / Hyper-V)
Windows 上で Podman を実行するには、Linux カーネルが必要となるため、仮想化技術を利用します。 Podman では、バックエンドとして WSL2 (Windows Subsystem for Linux 2) または Hyper-V を選択できます。
- WSL2: Windows 上で Linux をネイティブ実行するための互換レイヤーです。内部的には Hyper-V を利用しており、仮想マシンよりも少ないリソースで動作し、Windows との親和性が高いのが特徴です。
- Hyper-V: Windows に標準で搭載されている仮想化機能(ハイパーバイザー)です。 WSL を介さずに、独立した仮想マシンを構築できます。
本稿では WSL2 をバックエンドとして利用します。
2.3 Podman のインストール
CLI での操作に慣れていない方は Podman Desktop のインストールを推奨します。 Podman Desktop のインストーラーには Podman CLI も含まれており、同時にインストールされます。
まず、 Podman のインストーラーを公式サイトからダウンロードします。
- Podman 公式サイト にアクセスし、インストーラーをダウンロードします。
- ダウンロードしたインストーラーを実行し、画面の指示に従ってインストールを進めます。
- インストール中に、 WSL2 の有効化や Podman Machine のセットアップを促された場合は、指示に従ってセットアップしてください。
インストールが完了すると、 Podman Desktop アプリケーションが利用可能になるほか、 PowerShell やコマンドプロンプトから podman
コマンドが実行できるようになります。
2.4 Podman のセットアップ
Podman は Windows 上の仮想マシン(Podman Machine)を利用してコンテナを実行します。
2.4.1 Podman Machine の初期化と起動
まだ Podman Machine が作成されていない場合は、以下のコマンドを実行して Podman Machine を作成します。通常、 Podman Desktop の初回起動時に自動で Podman Machine が作成されます。
podman machine init
podman machine start
2.4.2 Podman Machine の確認
Podman の仮想マシン(Podman Machine)は以下のコマンドで確認できます。
podman machine list
実行結果:
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default wsl 23 hours ago 23 hours ago 6 2GiB 100GiB
podman-machine-default
があれば Podman Machine の作成は完了しています。
2.4.3 Rootful / Rootless モードの切り替え
Podman は root ユーザー(Rootful) または 非特権ユーザー(Rootless) で実行されます。 Rootless モードではホストの root 権限なしにコンテナを実行できます。一方、 Rootful モードでは特権操作が可能で、ファイル共有やネットワーク設定等が可能です。通常はセキュアな Rootless モードがデフォルトです。
Windows(ホストOS)上のフォルダをコンテナにマウントした際、コンテナ内のユーザーとホストOSのユーザーのIDが異なるため、ファイルの読み書きでパーミッションエラーが発生することがあります。
本来、セキュリティの観点からは Rootless モードが推奨されますが、開発の利便性を高め、このパーミッション問題を回避するために、今回は Podman Machine を Rootful モードで動作させます。
設定を変更するには Podman Machine を停止し Rootful に設定します。
podman machine stop
podman machine set --rootful
Rootless に戻すには以下のコマンドを実行します。
podman machine stop
podman machine set --rootful=false
設定変更後、 Podman Machine を再起動させます。
2.4.4 WSL2 のデフォルトディストリビューションの確認と設定
Windows 上に複数の WSL2 のディストリビューションをインストールしている場合、デフォルトで起動するディストリビューションを設定できます。
VSCode から呼び出される podman
コマンドが、意図した Podman Machine(podman-machine-default
)と確実に通信できるように、デフォルトのWSL2ディストリビューションを Podman Machine に設定しておくことを推奨します。これにより、他のWSL2ディストリビューションとの間で発生しうる予期せぬ競合を防ぎ、操作がスムーズになります。
現在の WSL2 ディストリビューション一覧を表示:
wsl -l -v
実行結果:
NAME STATE VERSION
* podman-machine-default Stopped 2
Ubuntu Stopped 2
WSL2 のデフォルトディストリビューションを変更:
wsl --set-default podman-machine-default
2.5 よく使う Podman の基本コマンド
Podman の基本的なコマンドをいくつか紹介します。これらの多くは docker
コマンドと同等です。
# pull: レジストリからイメージを取得(pull)
podman pull [options] IMAGE [IMAGE...]
# images: ローカルストレージ内のイメージを一覧表示
podman images [options] [IMAGE]
# run: 新しいコンテナでコマンドを実行
podman run [options] IMAGE [COMMAND [ARG...]]
# start: コンテナを1つ以上起動
podman start [options] CONTAINER [CONTAINER...]
# stop: コンテナを1つ以上停止
podman stop [options] CONTAINER [CONTAINER...]
# ps: コンテナを一覧表示
podman ps [options]
# rm: コンテナを1つ以上削除
podman rm [options] CONTAINER [CONTAINER...]
# exec: 実行中のコンテナ内でプロセスを実行
podman exec [options] CONTAINER COMMAND [ARG...]
# logs: コンテナのログを取得
podman logs [options] CONTAINER
# help: 各コマンドに関するヘルプを表示
podman help [command] [flags]
3. VSCode と Podman の連携
VSCode に拡張機能を追加し、 Podman と連携させることで、コンテナ開発の体験を大きく向上させることができます。ここでは、「開発環境のコンテナ化」を担う Dev Containers と、「コンテナ自体の管理」を担う Container Tools という、2つの重要な拡張機能の設定を行います。
3.1 Dev Containers: 開発環境をPodmanコンテナで起動する
VSCode で Docker の代わりに Podman を利用するように設定を変更します。
- 拡張機能マーケットプレースから
Dev Containers
を検索し、インストールします。 -
dev.containers.dockerPath
の設定をpodman
に変更します。
この設定により、プロジェクトに .devcontainer/devcontainer.json
ファイルが含まれている場合、 Dev Containers は podman
コマンドを使って開発環境コンテナをビルド・起動するようになります。
VSCode は Podman を利用して開発コンテナをビルド・起動し、プロジェクトフォルダをコンテナ内にマウントします。これにより、Podman 上で動作する隔離された開発環境での作業が可能になります。
devcontainer.json
の設定オプションやカスタマイズ方法については、Dev Containers 公式ドキュメントをご参照ください。
3.2 Container Tools: コンテナやイメージをGUIで管理する
Container Tools 拡張機能は、 VSCode の UI 上からコンテナ、イメージ、ボリュームなどを直接管理できるツールです。 Docker Desktop のダッシュボードのような機能を提供します。こちらの拡張機能も Podman を利用するように設定します。
- 拡張機能マーケットプレースから
Container Tools
を検索し、インストールします。 -
containers.containerClient
の設定をpodman
に変更します。
この設定を行うことで、 VSCode のアクティビティバーにあるコンテナアイコンをクリックした際に、 Podman が管理しているコンテナやイメージが一覧表示され、 GUI から直接操作できるようになります。
4. まとめ
本記事では、Windows 環境において Podman と VSCode Dev Containers を組み合わせて、モダンなコンテナベースの開発環境を構築する方法を紹介しました。 Docker Desktop の代替として注目される Podman を活用することで、ローカル環境をクリーンに保ちつつ、プロジェクトごとに最適化された再現性の高い開発環境が手に入ります。この快適な開発環境で、あなたのプロジェクトを加速させてください。
Discussion