docker-compose.yml
の概要。
ref. https://docs.docker.jp/compose/compose-file.html
version: '3.7'
services:
mysql:
# ....
app:
# ....
mysql
やapp
をDocker Compose
ではサービスと呼ぶ。
サービス
一覧を表示する サービス
と呼ぶ$ docker-compose ps --all
Name Command State Ports
----------------------------------------------------------------------------------
dockerq-ccom_app_1 docker-php-entrypoint sh - ... Up 0.0.0.0:8888->80/tcp
dockerq-ccom_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
サービスの Dockerfile やビルドディレクトリの内容を変更する場合は、docker-compose build を実行して再ビルドします。
Dockerfile
を変更したときに実行$ docker-compose build {{service}}
で特定のサービスだけをbuild
可能ref.
https://qiita.com/wasanx25/items/d47caf37b79e855af95f
Services are built once and then tagged as
project_service
, e.g.composetest_db
. If you change a service'sDockerfile
or the contents of its build directory, you can rundocker-compose build
to rebuild it.
image/buildプロパティは以下の3パターンがあり挙動が異なります。
ymlファイルにimage:が書かれている場合はそのイメージ名がローカルになければ、リモートからプルしてきます。imageが書かれていない場合、buildに書かれているパスの(デフォルトは)Dockerfileを参考にしてイメージを構築します。
コンテナの実行時、元になるイメージを指定します。リポジトリ名/タグ、あるいはイメージ ID の一部を(前方一致で)指定できます。 -- https://docs.docker.jp/compose/compose-file/compose-file-v3.html#image
イメージが存在していなければ、Compose は pull (取得)を試みます。しかし build を指定している場合は除きます。その場合、指定されたオプションやタグを使って構築します。 -- https://docs.docker.jp/compose/compose-file/compose-file-v3.html#image
image
プロパティがに指定したイメージがローカルに存在する場合はそのイメージを使用する。
ローカルにない場合にはリモート(多くはDocker Hub)からpullします。
version: '3'
services:
some:
image: some:${TAG}
# ...
other:
# ...
$ env TAG="1.0.0" docker-compose build some
// RepoTag
some:1.0.0
※ dockerのイメージはRepoTag
で特定する。
$ docker image inspect some:1.0.0
ref.
https://qiita.com/wasanx25/items/d47caf37b79e855af95f
Services are built once and then tagged as
project_service
, e.g.composetest_db
. If you change a service'sDockerfile
or the contents of its build directory, you can rundocker-compose build
to rebuild it.
version: '3'
services:
some:
build:
context: .
dockerfile: Dockerfile
# ...
other:
# ...
ビルドで作成される各サービスのイメージ名は以下の命名規則になる。
-イメージ名:ディレクトリ名_サービス名
build と同様に image (Docker イメージ)も指定する場合、 image の場所で指定された webapp とオプションの tag を使い、 Docker Compose が構築されるイメージに名前を付けます。
-- https://docs.docker.jp/compose/compose-file/compose-file-v3.html#build
サービス用のコンテナの構築、作成、起動、アタッチを行います。
State
はUp
に変更デタッチド・モード: バックグラウンドでコンテナを実行し、新しいコンテナ名を表示 --abort-on-container-exit と同時に使えない
State
はExit
に変更 Name Command State Ports
----------------------------------------------------------------------
dockerq-ccom_app_1 docker-php-entrypoint sh - ... Exit 137
dockerq-ccom_db_1 docker-entrypoint.sh mysqld Exit 0
停止しているコンテナを削除する。
Name Command State Ports
------------------------------
Volume
は削除されないNetwork
は削除されないstop
+ rm
+ Network
削除Volume
は削除しないstop
+ rm
+ Network
削除 + Volume
削除Container
、Network
、Volume
、Image
を削除--rmi
Remove images. Type must be one of: 'all': Remove all images used by any service. 'local': Remove only images that don't have a custom tag set by the
image
field.
-v
Remove named volumes declared in the
volumes
section of the Compose file and anonymous volumes attached to containers.
サービスに対して1回コマンドを実行します。たとえば、次のコマンドは web サービスを開始するためのコマンドで、サービス内で bash としてコマンドを実行します。
Docker Hub
にイメージをPush
ECR
の場合もデフォルトのコマンドを上書きします。
DockerfileにCMD
が定義されていてもいなくてもCMD
を無視してcommand
が実行されます
docker-compose.yml で command を書くと、docker-compose up を実行したときに、その内容が実行されます。Dockerfile で指定した CMD はこのときは無視されます。 なので、docker run で特定のコマンドを実行したいときは Dockerfile の CMD に書けばいいし、docker-compose up でコマンドを実行したいときは docker-compose.yml に記述すればいいと思います。
https://docs.docker.jp/compose/env-file.html
# docker-compose.yml
# ...
# ...
ARG MY_ENV1
ARG MY_ENV2
# ...
# ...
# .env
MY_ENV1=foo
MY_ENV2=bar
/docker-entrypoint-initdb.d
に配置したスクリプトは自動で実行される