#
ドキュメント

Document

自分のための備忘録です。

Docker Compose

概要

docker-compose.ymlファイル概要。

version: '3.7'
services:
  mysql:
  # ....

  app:
  # ....
  

上記のmysqlappDocker Composeではサービスと呼ぶ。

docker-composeコマンド

docker-compose ps --all

  • サービス一覧を表示する
  • docker-composeではコンテナをサービスと呼ぶ
       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

docker-compose build

サービスの Dockerfile やビルドディレクトリの内容を変更する場合は、docker-compose build を実行して再ビルドします。

https://docs.docker.jp/compose/reference/up.html

  • 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's Dockerfile or the contents of its build directory, you can run docker-compose build to rebuild it.

imageプロパティとbuildプロパティ
version: '3'
services:
  some:
    image: some:${TAG}
    build: 
      context: .
      dockerfile: Dockerfile
    # ...
  other:
    # ...
  • buildプロパティなし:imageプロパティに指定したイメージをDocker Hubから取得
  • buildプロパティあり:image名
env TAG="1.0.0" docker-compose build some
// RepoTag
some:1.0.0

※ dockerのイメージはRepoTagで特定する。

$ docker image inspect some

docker-compose up

サービス用のコンテナの構築、作成、起動、アタッチを行います。

https://docs.docker.jp/compose/reference/up.html

  • コンテナの構築、作成、起動、アタッチ
  • StateUpに変更
docker-compose up -d

デタッチド・モード: バックグラウンドでコンテナを実行し、新しいコンテナ名を表示 --abort-on-container-exit と同時に使えない

https://docs.docker.jp/compose/reference/up.html

docker-compose stop

  • サービス停止
  • StateExitに変更
      Name                     Command                State     Ports
----------------------------------------------------------------------
dockerq-ccom_app_1   docker-php-entrypoint sh - ...   Exit 137
dockerq-ccom_db_1    docker-entrypoint.sh mysqld      Exit 0

docker-compose rm

停止しているコンテナを削除。

Name   Command   State   Ports
------------------------------
  • Volumeは削除されない
  • Networkは削除されない

docker-compose down

  • stop + rm + Network削除
  • Volumeは削除しない
down -v
  • stop + rm + Network削除 + Volume削除
down --rmi all -v
  • イメージも削除
  • ContainerNetworkVolumeImageを削除
--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.

docker-compose run

サービスに対して1回コマンドを実行します。たとえば、次のコマンドは web サービスを開始するためのコマンドで、サービス内で bash としてコマンドを実行します。

https://docs.docker.jp/compose/reference/run.html

docker-compose push

  • Docker HubにイメージをPush
  • ECRの場合も

docker-compose.yml

commandプロパティ

デフォルトのコマンドを上書きします。

https://docs.docker.jp/compose/compose-file.html#command

  • DockerfileにCMDが定義されていてもいなくてもCMDを無視してcommandが実行

docker-compose.yml で command を書くと、docker-compose up を実行したときに、その内容が実行されます。Dockerfile で指定した CMD はこのときは無視されます。 なので、docker run で特定のコマンドを実行したいときは Dockerfile の CMD に書けばいいし、docker-compose up でコマンドを実行したいときは docker-compose.yml に記述すればいいと思います。

https://ja.stackoverflow.com/questions/30495/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AFdocker-compose-yml%E3%81%A8dockerfile%E3%81%AE%E3%81%A9%E3%81%A1%E3%82%89%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%E3%81%BB%E3%81%86%E3%81%8C%E3%81%84%E3%81%84

ARG/.env

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

  • MySQL公式イメージ初期化スクリプト用ディレクトリ
  • /docker-entrypoint-initdb.dに配置したスクリプトは自動で実行される

https://qiita.com/moaikids/items/f7c0db2c98425094ef10