docker-compose.yml

docker-compose.yml概要

参照:https://matsuand.github.io/docs.docker.jp.onthefly/compose/compose-file/compose-file-v3/https://docs.docker.jp/compose/compose-file.html

基本的な考え方は、dockerコマンドで実行することをyamlファイルで表現しているだけだという考え方でよい。

version: '3'
services:

  app:
    build:
      context: Dockerfileのあるディレクトリ
      dockerfile: Dockerfile名
    ports:
      - "3000:3000"
    networks:
      - ネットワーク名1
    volumes:
      - .:/app
      - ボリューム名1:/マウント先

networks:
  ネットワーク名1:
  ネットワーク名2:

volumes:
  ボリューム名1:
  ボリューム名2:

ネットワーク設定

networks:
  ネットワーク名1:
  ネットワーク名2:

コンテナ同士での通信用ネットワークを指定する。未指定でも、デフォルトのネットワークが作成され、コンテナ同士はホスト名にサービス名を指定して疎通ができる。

通常は省略される。

ボリューム設定

volumes:
  ボリューム名1:
  ボリューム名2:

ボリュームマウントするボリュームを指定する。なければ作成される。

サービス設定

イメージの指定

サービス設定はイメージを元にするか、Dockerfileを元にするかの2パターンがある。

services:
  # イメージをそのまま利用するケース
  サービス名1:
    image: ruby
  # ローカルのDockerfileを元にビルドするケース
  サービス名2:
    build:
      context: Dockerfileのあるディレクトリ
      dockerfile: Dockerfile名

上記buildの設定は、Dockerfileがデフォルト(Dokerfile)ならbuild: .という指定でもよい。

ボリュームの指定

services:
  サービス名1:
    volumes:
      - .:/app
      - ボリューム名1:/マウント先
volumes:
  ボリューム名1:

.:/appはバインドボリューム(ホストの.ディレクトリをコンテナの/appに割り当て)の指定で、ボリューム名1:/マウント先はボリュームマウントの指定。ボリューム名1はボリューム設定(servicesと同じ階層のvolumes設定)で指定して置く必要がある。

コンテナ作成時に-tオプションを指定するのと同等の指定

bashirbなどDockerfileのCOMMAND指定がttyの割り当てを前提としているイメージの場合、docker container create -t rubyのように-tオプションを指定してコンテナを作成しないと、docker container start コンテナ名としても即座に終了してしまう。

docker-compose.ymlで-tと同等の指定をするにはtty: trueを指定する。

services:
  ruby:
    image: ruby
    tty: true

docker-compose up -ddocker-compose exec ruby irbirbの実行ができる。

コンテナからホストにポートを公開する

services:
  app:
    ports:
      - "ホスト側のポート:コンテナ側のポート"

例えば、httpdを起動している(つまり、80番ポートを使う)コンテナがあって、ホスト側でhttp://localhost:8000/でアクセスできるようにしたいのであれば"8000:80"という設定をportsに追加すれば良い。

サービスの起動順序

depends_on

環境変数

environment