docker-composeチートシート
docker-composeとは
docker-composeとは、1つ以上のdockerコンテナに対する定義を行い、その定義を元にコンテナイメージの作成、コンテナの起動を行うツールである。
docker-composeの定義はdocker-compose.ymlというyaml形式のファイルに定義を行う。yml内では、コンテナのイメージを生成する際にベースとするイメージファイル、バージョンの指定、コンテナ作成時のコンテナ名、ホストマシンとコンテナで共有するディレクトリの設定などを定義することができる。
これにより、dockerコマンドでは、オプションと指定していた内容を覚える必要なく、容易にコンテナを利用することができる。
docker-compose.ymlの書きかた
docker-composeは設定情報として、yml形式のファイルを使用する。
通常ファイル名はdocker-compose.ymlとする。
version: '3'
services:
<service name 1>:
build:
context: .
dockerfile: <dockerfile name>
args:
- <arg1>=<value1>
- <arg2>=<value2>
image: <image name>:<tag>
container_name: <container name>
hostname: <hostname>
volumes:
- <host machine directory>:<virtual machine directory>:<access mode>
env_file: .env
environment:
- PATH=<additional path>:${PATH}
expose:
- <expose port number>
ports:
- <container port number>
- <container port number>:<host port number>
- <container port number>:<host port number>:<ip address>
tty: true
command: ["<command1>", "<command2>", "<command2>"]
logging:
driver: "json-file" # defaults if not specified
options:
max-size: "10m"
max-file: "3"
<service name 2>:
# Same as above service name 1.
-
service name
1つのdockerコンテナに対して付与する名前。 -
build
dockerfileよりdockerイメージをビルドする際に使用する情報-
context
docker-composeコマンドを実行したディレクトリを指定する。 -
dockerfile
ビルドに使用するdockerfile名を指定。通常はDockerfile or dockerfileを使用する。 -
args
docker-composeからdockerfileへ渡す変数。dockerfile側ではARG <arg1>
のようにarg1を定義し、${arg1}のように使用する。
-
-
image
dockerfileビルド後のimageに対して名称を指定する。また、:<tag>
とすることで、イメージに対してタグ名を付与することができる。 -
container_name
dockerコンテナに対する名称を指定する。 -
hostname
dockerコンテナで使用するhostnameを指定する。 -
volumes
ホストマシンとコンテナで共有するディレクトリを指定する。access modeには読み取り専用の場合"ro"、読み書き可能の場合、"rw"を指定する。 -
env_file
docker-composeではホストマシンの環境変数を${...}の形式で使用することができる。しかし、ホストマシンには必要な環境変数が全て設定されているとは限らない。そのため、ビルドを実施する際に必要な環境変数を.envファイルに記載し、.envファイルに必要な環境変数を設定し、使用することができる。.envファイルはdocker-compose.ymlと同じ階層のディレクトリに配置する必要がある。
また、.envファイルに設定している環境変数とホストマシンに設定している環境変数が衝突している場合、ホストマシンに設定している環境変数が優先される。 -
environment
コンテナで使用する環境変数を設定する。 -
expose
リンクするコンテナにポートを解放する。ホストマシンからは接続されません。 -
ports
ホストマシンに公開するコンテナ側ポートを指定する。-
<container port number>
指定したコンテナポート番号とランダムなホスト側ポート番号をマッピングする。 -
<container port number>:<host port number>
指定したコンテナポート番号と指定したホストマシンのポート番号をマッピングする。 -
<container port number>:<host port number>:<ip address>
指定したコンテナポート番号と指定したホストマシンのポート番号をマッピングし、指定したIPアドレスのみの通信を許可する。
-
-
tty
擬似端末(キーボードによる入力)をコンテナに結びつける設定 -
command
dockerfileのCMD命令を上書きする。指定方法は["...", "...", "..."]の形式で記載する。 -
logging
コンテナのロギングを行う。-
driver
-
json-file
json形式でログを残す。
-
-
options
-
max-size
ログファイルの最大サイズを指定する。"10m"と記載すると最大サイズを10Mとなる。 -
max-file
ログのローテート数を指定する。
-
-
CLI(Command Line Interface)
コンテナを起動する
docker-compose up [option]
-d: バックグラウンド起動
--build: dockerfile等に変更があった場合にはイメージの作成からコンテナの起動までを実施する。
指定のコンテナのみを起動
docker-compose up [container name]
コンテナにログイン
docker-compose exec [service name] /bin/bash
起動中のコンテナ一覧を表示する
docker-compose ps
イメージをビルドする
docker-compose build [option]
--no-cache: イメージのcacheを利用せず、イメージの作成を行う。
imageの一覧を表示する
docker-compose images
コンテナを停止
docker-compose down [option]
--rmi all: コンテナ起動時に関連するイメージを削除する。
コンテナの標準出力を表示
docker-compose logs [service name]
docker-composeで使用される環境変数等の情報を表示する
docker-compose config
Discussion