Docker Compose まとめ

## 目次
1. [Docker Composeとは?](#1-docker-composeとは)
1. [定義ファイルの書式](#2-定義ファイルの書式)
1. [docker-composeコマンド](#3-docker-composeコマンド)
1. [いろいろな例](#4-いろいろな例)

## 1. Docker Composeとは?
* コンテナ構築に関わるコマンド文の内容をテキストファイル(定義ファイル)に書き込んで、一気に実行したり、停止・破棄したりできる。
* 定義ファイル名は、「docker-compose.yml」で、YAML形式で記述する
* Dockerfileはイメージを作るだけだが、Docker Composeはコンテナ、ネットワーク、ボリュームを作成できる
* upコマンド(一括実行=run), downコマンド(コンテナとネットワーク一括停止・削除)

```yaml
# Apacheコンテナの定義ファイル例
version: "3"

services:
  apa000ex2:
    image: httpd
    ports:
      - 8080:80
    restart: always
```

```powershell
# 定義ファイル(docker-compose)の内容でコンテナが作成・実行される
$ docker-compose up httpd
```


## 2. 定義ファイルの書式

### 記述フォーマット

```yaml
# Docker Composeの大項目の書き方

# Docker Composeのバージョン情報
# 必ず先頭に書く
version: "3"

# コンテナの情報
services:
  コンテナ名1:
　　　　　　image: ~~
   networks:
　　　　　　　　-　~~
   ports:
   　　-　ポートの設定
    ...
  コンテナ名2:~~

# ネットワークの情報
networks:
  ネットワーク名1:~~

# ボリュームの情報
volumes:
  ボリューム名1:~~
  ボリューム名2:~~
```

**※「-」を先頭につけた箇所は複数指定ができるところ**

### 項目の定義項目リスト

#### 大項目

|大項目|内容|
|:---|:---|
|services|コンテナに関する定義をする|
|networks|ネットワークに関する定義をする|
|volumes|ボリュームに関する定義をする|

#### 大項目内の定義項目

|項目|docker runでの対応|内容|
|:---|:---|:---|
|image|イメージ引数|利用するイメージを指定する|
|networks|--net|接続するネットワークを指定する|
|volumes|-v, --mount|記憶領域のマウントを設定する|
|ports|-p|ポートのマッピングを設定する|
|environment|-e|環境変数を設定する|
|depends_on|なし|別のサービスに依存することを示す|
|restart|なし|コンテナが停止した時の再試行ポリシーを設定する|
|command|コマンド引数|起動時の既定のコマンドを上書きする|
|container_name|--name|起動するコンテナ名を明示的に指定する|
|dns|--dns|カスタムなDNSサーバーを明示的に設定する|
|env_file|なし|環境設定情報を書いたファイルを読み込む|
|entrypoint|--entrypoint|起動時のENTRYPOINTを上書きする|
|external_links|--link|外部リンクを設定する|
|extra_hosts|--add-host|外部ホストのIPアドレスを明示的に指定する|
|logging|--log-driver|ログ出力先を設定する|
|network_mode|--network|ネットワークモードを設定する|

#### restartの設定値
restartは、コンテナが停止したときの挙動を定義できる。

|項目|内容|
|:---|:---|
|no|何もしない|
|always|必ず再起動する|
|on-failure|プロセスが0以外のステータスで終了したときは再起動する|
|unless-stopped|停止したときは再起動しない、それ以外は再起動する|

## 3. docker-composeコマンド

```powershell
# 構文フォーマット
# 「-f」で定義ファイルの場所を指定する
$ docker-compose -f 定義ファイルのパス コマンド オプション
```

### docker-compose up
コンテナ・ボリューム・ネットワークを作成・実行する。

#### docker-compose upのオプション

|オプション|内容|
|:---|:---|
|-d|バックグラウンドで実行する|
|--no-color|白黒画面として表示する|
|--no-deps|リンクしたサービスを表示しない|
|--force-recreate|設定やイメージに変更がなくても、コンテナを再生成する|
|--no-create|コンテナがすでに存在していれば再生成しない|
|--no-build|イメージが見つからなくてもビルドしない|
|--build|コンテナを開始前にイメージをビルドする|
|--abort-on-container-exit|コンテナが1つでも停止したら、すべてのコンテナを停止する|
|-t, --timeout|コンテナを停止するときのタイムアウト秒数、既定は10秒|
|--remove-orphans|定義ファイルで定義されていないサービス用のコンテナを削除|
|--scale|コンテナの数を変える|

### docker-compose down
定義ファイルの内容に従って、コンテナとネットワークを停止・削除する。
オプション指定なしだと、ボリュームとイメージは削除しない。

#### docker-compose downのオプション

|オプション|内容|
|:---|:---|
|--rmi 種類|破棄後にイメージも削除する。(all:利用した全イメージ, local:imageにカスタムタグがないイメージ を対象)|
|-v, --volumes|volumesに記述されているボリュームを削除する、ただしexternalが指定されているものは除く
|--remove-orphans|定義ファイルで定義していないサービスのコンテナも削除する|

### docker-compose stop
定義ファイルの内容に従って、コンテナを停止する。

### 主なコマンド一覧

|コマンド|内容|
|:---|:---|
|up|コンテナを作成し、起動する|
|down|コンテナとネットワーク停止及び削除する|
|ps|コンテナ一覧を表示する|
|config|定義ファイルの確認と表示|
|port|ポートの割り当てを表示する|
|logs|コンテナの出力を表示する|
|start|コンテナを開始する|
|stop|コンテナを停止する|
|kill|コンテナを強制停止する|
|exec|コマンドを実行する|
|run|コンテナを実行する|
|create|コンテナを作成する|
|restart|コンテナを再起動する|
|pause|コンテナを一時停止する|
|unpause|コンテナを再開する|
|rm|停止中のコンテナを削除する|
|build|コンテナ用のイメージを構築または再構築する|
|pull|コンテナ用のイメージをダウンロードする|
|scale|コンテナ用コンテナの数を指定する|
|events|コンテナからリアルタイムにイベントを受信する|
|help|ヘルプ表示|

## 4. いろいろな例
随時追加予定。