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
オプションを指定するのと同等の指定
bash
やirb
など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 -d
、docker-compose exec ruby irb
でirb
の実行ができる。
コンテナからホストにポートを公開する
services:
app:
ports:
- "ホスト側のポート:コンテナ側のポート"
例えば、httpdを起動している(つまり、80番ポートを使う)コンテナがあって、ホスト側でhttp://localhost:8000/
でアクセスできるようにしたいのであれば"8000:80"
という設定をports
に追加すれば良い。
サービスの起動順序
depends_on
環境変数
environment