🦁

VScode Remote Container

2021/04/23に公開

ドッカーコンテナをフル機能の開発環境として、コンテナーにデプロイするどうかに関係なく、コンテナーは次にことができるため、優れた開発環境になる。

・デプロイ先のオペレーティングシステムと同じオペレーティングシステムで一貫性があり、簡単に再現できるツールチェーンを使用して開発する。
・異なる分離された開発環境間で素早く交換しローカルマシンへの影響を心配することなく安全に更新を行う。
・新しい。チームメンバー/貢献者が移管した開発環境で簡単に立ち上げて実行できるようにする。
・ローカル設定に影響を与えることなく、新しいテクノロジーを試すか、コードベースのコピーを複製する。
拡張機能は、明確に定義されたツールとランタイムスタックを実行する開発コンテナを開始(またはアタッチ)する。
ワークスペースファイルは、ローカルファイルシステムからコンテナにマウントすることも、コンテナの実行後にコピーまたは複製することもできる。
拡張機能は、ツール、プラットフォーム、及びファイルシステムに完全アクセスできるコンテナ内にインストールされて実行される。

次にコンテナ内で分離されていることを除いて、全てがマシン上でローカルに実行されているかようにVSCodeを実行する。

Remote Containerとは?
環境の構築・再現が容易で、他の環境から隔離させられるDockerコンテナを使った開発環境を使っている方も多いと思う。
Remote - Containerはそんな方々に便利そうな拡張。
その名の通り、Dockerコンテナ上で動作している開発環境に接続して、あたかもコンテナ上でVscodeを動作させているかのようになる。

動作確認するにあたり、次のようなdocker-compose.ymlをプロジェクトのルートディレクトリに持つ簡単なRailsアプリケーションを例にする。

version: "3"
volumes:
pgdata:
gem_home:

services:
postgres:
image: postgres:10.7
ports:
- 35432:5432
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: pgpassword
rails:
build: .
image: rails-pg
ports:
- 33000:3000
volumes:
- .:/rails-pg
- gem_home:/usr/local/bundle
- /rails-pg/.git
depends_on:
- postgres
working_dir: /rails-pg
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"

次のコンテナ定義を含むシンプルな構成になっている。

・ postgres
PostgreSQL 10.7
・rails
Railsのコンテナ。Ruby 2.6.3、 Rails5.2.2
プロジェクトルートを /rails-pgマウントしておりRailsを起動できる

docker-compose upを実行すると次の通りになる。

$ docker-compose ps
Name Command State Ports

rails-pg_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:35432->5432/tcp
rails-pg_rails_1 bash -c rm -f tmp/pids/ser ... Up 0.0.0.0:33000->3000/tcp

ブラウザでlocalhost:330000を開くと,Railsアプリケーションにアクセスできる。
開発作業はrailsコンテナ入ってやりたいということになる。

VScodeを閉じると、コンテナも停止される。

.devcontainer.hson
再度、普通にFileメニューからVSCodeが起動するコンテナの開発環境Dev Containerについての設定ファイル。

vscodeのRemote Container環境を真面目に構築してみる。

現在、windowsでRemote WSLを使っており、そのwsl環境はansibleでガンガン管理されている。

Discussion