Podman+コンテナ +SSH+ Zed Editor で開発環境構築!
Zed Editorでコンテナ環境の開発できないか?と思い、調べていたところ、devPodで構築する方法に辿り着きました。今回はdockerよりも軽量のpodmanを使用しています。
今回のゴール
Dockerfile, docker-compose.yml, devcontainer.json,authorized_keysの4つのファイルを使って、Podman コンテナ上に Zed Editor の開発環境を構築し、実際に Zed Editor からコンテナに接続して開発できるようにします。authorized_keysはSSH接続に求められる秘密鍵です。
devpod-container/
└── .devcontainer/
└──authorized_keys
└── Dockerfile
└──docker-compose.yml
└──devcontainer.json
- インストール
まずは、必要なツールをインストールしましょう。
Zed Editor: 公式サイトからダウンロードしてインストールしてください。
Podman: Podman 公式サイトの手順に従ってインストールしてください。
DevPod: DevPod 公式サイトからインストールしてください。DevPod は、Dev Containers 環境を簡単に作成・管理できる便利なツールです。
2.ファイルの準備
次に、開発環境の設定ファイルを用意します。devpod-container ディレクトリを作成し、その中に .devcontainer ディレクトリを作成、さらにその中に以下の4つのファイルを作成してください。
イメージは下記の通りです。
各ファイルの内容は下記の通りです。
Dockerfile
FROM ubuntu:latest
# パッケージリストを更新し、必要なパッケージをインストール
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
bash \
coreutils \
procps\
tini \
nano \
openssh-server \
sudo && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# SSHの設定を行う
RUN mkdir /var/run/sshd && \
echo 'root:123' | chpasswd
#ssh接続の認証設定
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
&& sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config \
&& echo "PermitRootLogin yes" >> /etc/ssh/sshd_config \
&& echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config \
&& echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config \
&& echo "UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config
#秘密鍵をコピー
COPY authorized_keys /root/.ssh/authorized_keys
RUN chmod 700 /root/.ssh && chmod 600 /root/.ssh/authorized_keys && \
chown root:root /root/.ssh/authorized_keys
RUN echo "" > /root/.bashrc
# Tiniをエントリーポイントに設定
ENTRYPOINT ["/usr/bin/tini", "--"]
# SSHサービスを起動し、コンテナを終了しないようにする
CMD ["/usr/sbin/sshd", "-D"]
CMD ["/usr/sbin/sshd", "-D"]はコンテナを起動し続けるためのコマンドです。
docker-compose.yml
services:
devpod-dev:
build:
context: .
dockerfile: Dockerfile
container_name: devpod-container
restart: unless-stopped
volumes:
- .:/app
ports:
- "2222:22"
services: devpod-dev:: devpod-dev というサービス (コンテナ) を定義します。このサービス名 (devpod-dev) は後で devcontainer.json で指定します。
- build: .: Dockerfile を使ってイメージをビルドすることを指定します。. は Dockerfile が docker-compose.yml と同じディレクトリにあることを意味します。
- restart: unless-stopped: コンテナが予期せず停止した場合に、自動的に再起動するように設定します。
devcontainer.json
buildを同じディレクトリのDockerfileに指定します。
{
"name": "devpod-dev",
"dockerComposeFile": ["docker-compose.yml"],
"service": "devpod-dev",
"workspaceFolder": "/app",
"build": {
"dockerfile": "Dockerfile",
"context": "."
},
"remoteUser": "root",
"shutdownAction": "stopCompose"
}
-
dockerComposeFile: ["docker-compose.yml"]: 使用する docker-compose.yml ファイルを指定します。
-
service: "devpod-dev": docker-compose.yml で定義した devpod-dev サービスを、開発コンテナとして使用することを指定します。
-
workspaceFolder: "/app": Zed Editor でコンテナに接続した際に、最初に開くワークスペースのパスを /app ディレクトリに設定します。docker-compose.yml でボリュームマウント設定をした /app ディレクトリを指定することで、ホスト側のファイルがワークスペースとして開かれます。
秘密鍵authorized_keysの作成方法
ssh-keygen -t rsa
odsフォルダー直下の.sshフォルダーに秘密鍵が生成されるので、秘密鍵〇〇.pubファイルを.devcontainer直下にコピーし、authorized_keysに名前を変更する。
DevPodの設定
DevPod を使ってコンテナを立ち上げます。DevPod の設定画面を開き、以下の手順で設定してください。
Provider: 「Docker」を選択します。
Docker Path: Podman を使用する場合は、Docker Path に podman と入力します。これにより、DevPod が Docker の代わりに Podman を使用するようになります。
ProviderのDockerを選択し、DockerPathにpodmanを入力。
Workspaceを選択し、podmanの「create」をクリック。
フォルダーを選択し、ディレクトリを入力
Devcontainer Pathに自分がEnter Workspaceで選択したディレクトリの中にある「devontainer.json」の相対パスを入力する。
今回は「.devcontainer/devcontainer.json」を入力。
後はcreate workspaceをクリックしたら、コンテナが立ち上がり、remote接続した、zed editorが立ち上がります。
まとめ
これで、Podman コンテナ + Zed Editor の開発環境が完成しました!
DevPod を使うことで、Zed Editorでも簡単にコンテナ開発環境を構築・管理できます。今回の設定をベースに、ぜひ色々な開発環境を試してみてください。
おわりに
最後までお読みいただきありがとうございました!
Discussion