Docker compose 備忘録

Docker とか詳しく分かってない人が Swagger UI を docker で立ち上げるまでの docker-compose 備忘録


## Docker インストール

1. Docker Hub の アカウント作成 & Docker desktop for mac をダウンロード
  > [Docker Hub](https://hub.docker.com/editions/community/docker-ce-desktop-mac)

2. Docker desktop をインストール & インストールチェック

```
$ docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89
 Built:             Thu Jul 25 21:18:17 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
```


## launch

1. swagger.yaml を作成
2. docker-compose.yml を作成
3. docker-compose.yml がある階層で `docker-compose up -d`
4. `http://localhost:3200` にアクセス
5. Swagger UI がブラウザで見れる！！！！


今回作成した階層構造はこうなりました。

```
swagger/
  ├ swagger.yaml
  └ docker/
      └ docker-compose.yml
```

### コンテナの起動

- `docker-compose up`
  - コマンドを実行した階層の docker-compose.yml をもとにコンテナ起動

exit した場合はコンテナが終了するので `docker-compose up -d` でデタッチモード (バックグラウンド) で起動すると動き続ける。


- `docker-compose start`
  - 停止中のコンテナ起動


### コンテナの確認

- `docker-compose ps` or `docker container ls`

```
$ docker-compose ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                            NAMES
c50f725ebe68        swaggerapi/swagger-ui   "sh /usr/share/nginx…"   25 hours ago        Up 9 hours          80/tcp, 0.0.0.0:3200->8080/tcp   docker_swagger_1
```


### コンテナの停止・削除
  
- `docker-compose stop`
  - コンテナ停止


- `docker-compose down`
  - docker-compose で作成されたコンテナ関連削除
  - `docker-compose down -v` で volume ごと削除


## Example

- 今回使用した docker-compose.yml の例

```docker-compose.yml
version: '3'

services:
  swagger:
    image: swaggerapi/swagger-ui
    environment:
      API_URL: /swagger.yaml
      BASE_URL: /
    volumes:
      - ../swagger.yaml:/usr/share/nginx/html/swagger.yaml
    restart: no
    ports:
      - 3200:8080
```


### version

- 起動する docker の version
  - 3 系が最新


### services

- Docker でアプリケーションを動かすための各要素
  - ls で確認したときの name になる
    - `docker_swagger_1`


#### image

- 起動するコンテナのイメージ
  - ローカルになければリモートから pull ってくる


#### environment

- 環境変数
  - image 内の環境変数を設定


#### volumes

- マウントする設定ファイル/ディレクトリの指定
  - ホスト内のファイル/ディレクトリ : マウントするファイル/ディレクトリのコンテナ内のパス

```
volumes:
  - ./dir:/var/www/dir
```

ホスト上の dir 内でファイルを作るとコンテナの dir 内にも作られる。
(docker-compose.yml から見た相対パス)

一番上の例だと `../swagger.yaml` を更新するとコンテナ内の `/usr/share/nginx/html/swagger.yaml` も更新される。


#### restart

- 実行時に再起動するかどうか

|option|挙動|
|:-:|:-:|
|no|再起動しない : デフォルト|
|always|再起動する|
|on-failure|?|
|unless-stopped|?|

今回は特に気にしてなかったので詳しく調べていません


#### ports

- コンテナの port 指定



## 参考

> [DockerをMacにインストールする（更新: 2019/7/13） - Qiita](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)

> [Swagger 3.0のOAuth認証にCognito User PoolsのOAuth Clientを使う ｜ DevelopersIO](https://dev.classmethod.jp/tool/swagger/swagger-3-oauth-cognito-user-pools/)