これだけ知っとけ！docker-composeスニペット集

# はじめに

コピペで使える docker-compose 記載例集です。

# 更新履歴

- 2023.07.19 SQLServerの記載内容を一部更新。Wordpressを追加。
- 2021.01.27 SQLServerの記載を修正。WSL2上で実行時のエラー対策。
- 2020.11.11 SQLServerを追加

# 使い方

1. Mac, Windows 双方とも、空のディレクトリを作成する。
2. `docker-compose.yml`という名前のファイルを新規作成する。
3. 記載例集に載っている記載例をコピー＆ペーストして保存する。
4. 上記フォルダをカレントディレクトリにして、Macならターミナル、WindowsならPowerShellかコマンドプロンプトを開く。
5. `docker-compose up`を実行。

## Macでターミナルを開く方法

https://qiita.com/yamagh/items/02608e97be22c85cefaa 参照。

## WindowsでPowerShellを開く方法

エクスプローラの「ファイル」メニューからPowerShellを開くことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/3ed1af56-65fd-a64d-7355-d15491b1f709.png)

# 記載例集

## MySQL

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

services:
  # MySQL
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: mysql
      MYSQL_DATABASE: appdb
    volumes:
      - ./db/data:/var/lib/mysql
    ports:
    - 3306:3306
```
バージョン指定は8.0にしていますが、5.5、5.7等でもOKです。
接続ID/Passwordは、root/mysqlになります。また、初期作成されるデータベース名がappdbになります。
変更したい場合は、environmentの各項目を修正してください。
`localhost:3306`にアクセスすれば接続できます。
docker-compose.ymlがあるフォルダにdbフォルダが自動的に作成され、この中にMySQLのデータが入ります。
このフォルダの中身を消去するとDBを初期化できます（downしている時に消去してください）

## jupyterLab

```yml:docker-compose.yml
version: '3'
services:
  lab:
      image: jupyter/datascience-notebook
      environment:
          - JUPYTER_ENABLE_LAB=yes
      ports:
          - "8888:8888"
      volumes:
          - ./work:/home/jovyan/work
```

notebookよりもlabのほうが使い勝手が良いと思います。また、ホームにworkディレクトリをマウントさせています。
workの中にノートを作成していけば良いでしょう。

## gcc

たまにめっちゃCのソースをコンパイルしたいときがある。

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

services:
  gcc:
    image: gcc
    tty: true
    volumes:
      - ./src:/src
```

`tty: true`を書いておかないとすぐexitしてコンテナが終了してしまいます。
コンテナは起動だけしておいて、あとからゆっくりCLIでアタッチしましょう。

## SQLServer

SQLServerもdockerで構築できるようになりました。

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

services:
  # SQLServer
  db:
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      ACCEPT_EULA: Y
      MSSQL_SA_PASSWORD: Your_Password
    volumes:
      - ./db/mssql:/var/opt/mssql
    ports:
    - 1433:1433
```
MySQLと同様、`/ver/opt/mssql` にデータベースに関するデータが一式入ります。
全削除すればDBを初期化できますし、このディレクトリをそのままコピーすれば環境の移動もOKです。
（もちろんdownしている時にやってください）

### 2021.01.27 追記
上記docker-compose.ymlをWSL2上のDokcerで実行するとエラーで起動しません。
参考：https://stackoverflow.com/questions/59886014/permission-denied-when-persisting-a-container-of-mcr-microsoft-com-mssql-server
マウントするボリュームを `/var/opt/mssql` ではなく `/var/opt/mssql/data` にすると起動します。

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

services:
  # SQLServer
  db:
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      ACCEPT_EULA: Y
      MSSQL_SA_PASSWORD: Your_Password
    volumes:
      - ./db/mssql/data:/var/opt/mssql/data
    ports:
    - 1433:1433
```
### 2023.07.19 追記

環境変数で設定するSAのパスワードは、追記現在では`MSSQL_SA_PASSWORD`という名称が推奨され、旧来の名称は非推奨になっているようです。なので記事のenvironmentを修正しています。
参考：https://learn.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-docker?view=sql-server-ver16&pivots=cs1-bash

# Wordpress

WordpressだってDocker一発で起動できます。

```yml
version: '3'

services:
   db:
     image: mysql:8.0
     volumes:
       - db_data:/var/lib/mysql
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
```

db側とwordpress側の環境変数で設定しているDBのユーザー名、パスワードは一致させる必要があることだけ要注意です。手っ取り早くスクラップ＆ビルドしたい場合にお勧めです。

# 終わりに

記載例集は順次増やしていく予定です。