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