🦭
VS Code + Remote Development + Podmanでコンテナの中で開発を行う
去る11月21日に行われた VS Code Conference Japan にて「Remote Development with Podman」の内容で発表を同いました
イベントサイト
発表スライド
本記事は初出の発表資料を再構成し、内容を整理したものになります。
VS CodeにおけるPodmanのサポート
VS Code Remote Developmentを使ったリモート開発のうち、Remote - ContainersでPodmanをコンテナ実行環境としての利用が可能です。なお、Remote - ContainersにおけるPodmanのサポートは 2020年4月、VS Code v1.45から。
Remote - Containersで具体的にできること
- Dockerの代わりにPodmanでコンテナを実行
- VS CodeからPodmanで起動したコンテナへ接続し、コンテナの中で開発を実施
Podmanの利用方法
-
Docker Pathに
podman
を指定する
-
あとはDockerを使用する手順と同様
注意点:Podmanの動作OS
Podmanの動作環境については下記の記事を参照
- MacとWindowsはリモートクライアント(podman-remote)しかない
- リモートクライアントではRemote-Containersの機能は使用できない[1]
- つまり、「現時点でVS Codeのサポート構成を実現できるのはLinux環境のみ」
Remote-Containersで動作確認済みの環境
下記はVS CodeとPodmanを導入した環境で実際に動作テストを行った結果、正常動作が確認できた内容になります。
Linux(Podman on Fedora 33)
- Linuxデスクトップ上でVS Codeを起動し、同OS上でPodmanによるコンテナを実行
- 動作確認OS:Fedora 33 WorkStaion
- ポイント:
- VS Codeのサポート構成
- Podmanは一般ユーザーで実行可能
- SELinuxの無効化は不要(エラー対応のソース修正は必要)
- 詳細は発表資料P.16を参照:https://speakerdeck.com/tnk4on/remote-development-with-podman?slide=16
Windows(Podman on WSL2)
- Windowsデスクトップ上でVS Codeを起動し、WSL2内でPodmanによるコンテナを実行
- OS:Windows 10 + WSL2(Ubuntu-20.04)
- ポイント:
- VS Codeの非サポート構成
- Remote - WSLで接続した環境上で、さらにRemote - Containersを実行
- Podmanは一般ユーザーで実行可能
- 詳細は発表資料P.20を参照:https://speakerdeck.com/tnk4on/remote-development-with-podman?slide=20
MacでもVS Code + Podmanで開発を行いたい!
どうしてもコンテナの実行にDockerを使わずにPodmanを使いたい、またはDokcerが実行できないOS環境の場合。Podmanで「Dockerを実行できるコンテナ」を動かす→(Docker in Podman)。
(参考)Docker in Docker
- Dockerの上で(中で?)Dockerを動かす技術
- Dockerオフィシャルコンテナイメージあり
- Docker in PodmanはこのコンテナイメージをPodmanで動かしたもの
Docker in Podmanの実行方針
- Docker in Dockerのコンテナイメージを使用
- TCPで直接ソケット接続する
- Podmanコマンドはルート権限で実行する
- 一般ユーザーだと
docker run
でエラー発生。コンテナの実行ができない。
- 一般ユーザーだと
- Cgroup v1に変更
- 実行コマンド
$ sudo podman run --log-level=debug -e DOCKER_TLS_CERTDIR="" --privileged -dit --name dind -p 2375:2375 docker:dind
Docker in Podman on Fedora
- ローカル端末からコンテナ実行されているDockerホストへTCP直接接続
まとめ
- VS Code + Remote Development + Podmanのサポート構成はLinux環境のみ
- Fedora 33 Workstationで動作確認済み
- Windows環境ではWSL2を併用することでPodmanの利用は可能
- Windows 10 + WSL2(Ubuntu-20.04)で動作確認済み
- Macの場合はPodmanの実行ができないため、Docker in Podmanの技術を使う
- Dockerをコンテナ実行環境として動作確認済み
- ただし、Mac以外にPodmanを実行できるLinux環境は用意する必要がある
- まだまだPodmanの利用における制限は多いが、今後のアップデートでDockerとの選択が容易にできるようになることを期待したい
-
ドキュメントに記載は無いが動作検証の結果から判断 ↩︎
Discussion