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 sampleGo server with an Nginx proxy and a Postgres database sample をご覧ください。

  1. Dev Environment から Create をクリックします。 Create a Dev Environment ダイアルログが表示されます。

  1. Get Stated をクリックし、 https://github.com/dockersamples/compose-dev-env.git をコピーし、それを Existing Dev EnvironmentEnter the Git Repository フィールドに追加します。

  1. 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 ファイルで定義されたサービスは、他のターゲットを使ったイメージの構築や、他のイメージを直接参照できます。