はじめに
VSCode で Dev Container による開発環境を構築する際にすぐに使用できるテンプレートを作成しました
毎回Docker関連のファイル修正などで時間が取られる為、主に自分用にシンプルな雛形を用意しました
特に 環境を構築する時にトラブルになりやすいユーザー情報(UID/GID)について、ホスト OS から引き継いだ値で Dev Container 用ユーザー情報を作成するようにしています
NodeJSのイメージを使用していますが、環境設定は最小限にしていますので環境に合わせてDockerイメージを指定すれば他環境でも使えると思います
使用方法
1. 前提条件
下記環境で作成/動作確認しています
- Mac
- Colima
- Visual Studio Code
- VSCode Dev Containers 拡張機能 or Remote Development
- Zsh
(Windows/WSL2 での動作確認はしていませんが Windows 環境でも Docker 実行及び WSL2 ユーザーのシェルが zsh となっていれば動作すると思います)
2.セットアップ手順
リポジトリのクローン
git clone https://github.com/satoppe343/devcontainer-starter.git
下記操作を行いクローンしたリポジトリを Dev Container で開く
1. VS Codeでプロジェクトフォルダを開く
2. F1キー(またはCtrl+Shift+P / Cmd+Shift+P)を押してコマンドパレットを開く
3. クローンしたディレクトリを選択
以上で VSCode で Dev Container で作成されたコンテナ内で作業が可能となります
3. 動作確認
- ユーザー情報(UID/GID)がホスト OS から引き継がれている事の確認
id
- コンテナ一覧の確認
docker ps -a
- Dev Container で作成されたコンテナの削除
docker rm -f $(docker ps -a | grep devcontainer-starter | cut -d ' ' -f 1)
※何か不明な不具合が発生した場合はコンテナを削除してみると解決する場合が多いです
4. その他
Devcontainer 実行ユーザーのユーザー情報(UID/GID)をホスト OS から引き継がないで新規 ID を振るように変更したい場合は下記設定を変更してください
ただしその場合、ファイル権限の設定変更など更に追加で設定が必要になるはずですが、現時点では未検討で動作確認もしていない為、必要な修正を別途検討して対応する必要があります(そういった検討を避ける為に現在の仕様で環境作成するようにしています)
-
initialize.shの下記について固定値(2000 など)を設定するように変更(.envをファイルとして作成し、スクリプトで都度作成する処理を削除する方がベター)
(変更前)
HOST_UID=$(id -u)
HOST_GID=$(id -g)
(変更後)
HOST_UID=2000
HOST_GID=2000
-
Dockerfile.devの下記処理を削除
RUN set -eux; \
# ホストのUID/GIDを引き渡す場合、OS上に既にUID/GIDが存在してもエラーが発生しないようにする為の削除処理
if getent passwd "${USER_UID}" >/dev/null; then \
...
groupdel "${oldgroup}" || true; \
fi