Compose Dev Environment の作成¶
Dev Environment を使い、 Docker Compose をベースとしたプロジェクトをコラボレーションします。
シンプルな Dev Environment として、以下より Compose Dev Environment を作成できます:
Git リポジトリ
Git リポジトリのブランチやタグ
Git リポジトリのサブフォルダ
ローカルフォルダ
注釈
SSH を使って Git リポジトリをクローンする場合、自分の SSH 鍵を ssh-agent に追加する必要があります。そのためには、ターミナルを開き ssh-add <path to your private ssh key>
を実行します。
Compose Dev Environment を作成¶
例として、 Docker Samples GitHub リポジトリにあるシンプルな compose-dev-env
プロジェクトを使って、 Git リポジトリから Compose Dev Environment を作成する方法を紹介します。
注釈
Git リポジトリのサブディレクトリから Compose Dev Environment を作成したい場合、現時点では、 Dev Environment はサブディレクトリの主な言語を検出できません。自分のベースイメージか、サブディレクトリ内の .docker フォルダ内にある compose ファイルで定義する必要があります。
設定の仕方についての詳しい情報は、 React application with a Spring backend and a MySQL database sample や Go server with an Nginx proxy and a Postgres database sample をご覧ください。
Dev Environment から Create をクリックします。 Create a Dev Environment ダイアルログが表示されます。
Get Stated をクリックし、
https://github.com/dockersamples/compose-dev-env.git
をコピーし、それを Existing Dev Environment の Enter the Git Repository フィールドに追加します。
Continue をクリックします。これはプロジェクトを初期化し、 Git コードをクローンし、 Compose アプリケーションを構築します。これは:
Compose ファイル内で定義したサービスのローカルイメージを構築
他のサービスが必要なイメージの取得
ボリュームとネットワークの作成
Compose スタックの起動
アプリケーションが起動して実行中になれば、ブラウザで http://localhost:8080 を開いて確認できます。
Compose アプリケーションの起動にかかる時間は、アプリケーション設定の仕方に依存します。たとえば、イメージの構築にかかる時間や、定義したサービスの数によります。
シンプルな Dev Environment とは異なり複数のサービスが設定されているため、 VS Code では直接開けませんのでご注意ください。 VS Code 内で特定のサービスを開くには、サービスの上にマウスカーソルを移動し、 Open in VS Code ボタンをクリックします。これは、 VS Code 内でサービスの開発や更新をできるようにするため、既存のコンテナは停止し、新しいコンテナが作成されます。
これで、Compose アプリケーションに対してサービスの更新やテストが行えます。
自分の Compose Dev Environment をセットアップ¶
自分の Compose ベースのプロジェクトに Dev Environment をセットアップするには、 Docker Desktop に構築、起動、実行の仕方、サービスが Dev Environment で使う正しいメージを伝える追加設定のステップがいくつかあります。
Dev Environment は、自分のプロジェクトのルート以下の .docker
ディレクトリ内にある追加 docker-compose.yaml
ファイルを使います。このファイルによって、専用サービス用に必要なイメージの定義や、公開したいポートだけでなく、今後の Dev Environments で追加されるオプションも扱えるようにします。
compose-dev-env サンプルプロジェクトで使われている docker-compose.yaml
ファイルの詳細をみてみましょう。
version: "3.7"
services:
backend:
build:
context: backend
target: development
secrets:
- db-password
depends_on:
- db
db:
image: mariadb
restart: always
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent" ]
interval: 3s
retries: 5
start_period: 30s
secrets:
- db-password
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_DATABASE=example
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password
expose:
- 3306
proxy:
build: proxy
ports:
- 8080:80
depends_on:
- backend
volumes:
db-data:
secrets:
db-password:
file: db/password.txt
yaml ファイル内では、構築コンテクスト backend
の指定があります。指定されているのは、コンテナは backend
ディレクトリ( context
属性)内にある Dockerfile の、 development
ステージ( target
属性)を使って構築されます。
Dockerfile の development
ステージの定義は、以下の通りです:
FROM golang:1.16-alpine AS build
WORKDIR /go/src/github.com/org/repo
COPY . .
RUN go build -o server .
FROM build AS development
RUN apk update \
&& apk add git
CMD ["go", "run", "main.go"]
FROM alpine:3.12
EXPOSE 8000
COPY --from=build /go/src/github.com/org/repo/server /server
CMD ["/server"]
development
ターゲットは、開発に必要な全ての依存関係で golang:1.16-alpine
イメージを使います。 VS Code からプロジェクトを直接起動でき、データベースやフロントエンドのような、他のアプリケーションやサービスとやりとりできます。
この例では、 Docker Compose ファイルは同じです。ですが、異なるファイルも指定でき、メインの Compose ファイルで定義されたサービスは、他のターゲットを使ったイメージの構築や、他のイメージを直接参照できます。
次はどうしますか?¶
Dev Environment を共有 する方法を学びます。
参考
- Create a Compose Dev Environment
https://docs.docker.com/desktop/dev-environments/create-compose-dev-env/