Docker for Macで開発環境(DBとWEBサーバ)を用意した記録

PCの中を汚したくなかったのでDockerからいれてみた

- Docker for Macを下記URLからDLとインストール
  - https://hub.docker.com/editions/community/docker-ce-desktop-mac
  - インストールできたらコマンドラインで```docker```コマンドが使えるようになる

- DB:mysql，WEBサーバ:nginxのイメージを```pull```コマンドでダウンロード
  - バージョンの指定もできるが今は最新版をダウンロードする
  - ```images```コマンドでダウンロードしたイメージの一覧が確認できる

```sh
コンソール
$ docker pull mysql
$ docker pull centos
$ docker images
```

- DB:mysqlの用意
  - コンテナ名:mysql
  - mysqlのrootパスワード: password
  - 最後にコンテナの中に入って起動しているか確かめる
    - コンテナの中から出たい時は```exit```コマンドで出れる
  - `-p`オプションで転送元:転送先のポートフォワーディングができる
  - 新しいmysqlだと安易なアクセスを許さないようなので`--default-authentication-plugin=mysql_native_password`オプションを追加（詳細はよく把握していない）

```sh
コンソール
$ docker run -it --name mysql -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 mysql --default-authentication-plugin=mysql_native_password
$ docker exec -it mysql bash
```

- WEBサーバ:nginxの用意
  - コンテナ名: mycentos
  - 最後にコンテナの中に入って起動しているか確かめる

```sh
コンソール
$ docker run -it --name mycentos -d centos
$ docker exec -it mycentos bash
```

- centos内でnginxを下記のnginx本家の言う通りに用意する
  * http://nginx.org/en/linux_packages.html#RHEL-CentOS

```sh
centosの中
$ yum install yum-utils
$ vi /etc/yum.repos.d/nginx.repo
$ yum-config-manager --enable nginx-mainline
$ yum install nginx
```

- ```/etc/yum.repos.d/nginx.repo```では新規作成して下記をコピペし保存

```repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
```

- mysqlクライアントも入れておく

```sh
centosの中
$ yum install -y mysql
```

- WEBサーバのコンテナのイメージ化とアップロード
  - ```docker ps```コマンドでCONTAINER IDを確認する
  - コンテナをを```commit```コマンドによりイメージ化
  - ```$ docker ps```コマンドでイメージ化できているか確認
  - Docker Hubに```push```コマンドをしてアップロード
    - 1.0とか付けてるけどおそらく任意の数でいいと思う

```sh
コンソール
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
f760e6313d6b        centos              "/bin/bash"              23 minutes ago      Up 23 minutes                             mycentos
ed21f55a3fe4        mysql               "docker-entrypoint.s…"   25 minutes ago      Up 25 minutes       3306/tcp, 33060/tcp   mysql
```

```sh
コンソール
$ docker commit f760e6313d6b {user名}/centos:1.0
$ docker login
$ docker push {user名}/centos:1.0
```

- webサーバを立ち上げる
  - testappに入ってmysqlに接続できるかテスト
  - 接続後mysqlへの疎通も確認

```
コンソール
$ docker run -it --name testapp --link mysql:mysql -d -p 8080:80 {user名}/centos:1.0
$ docker exec -it testapp bash
```

- 以下のように入れるはず

```sh
testappの中
$ mysql -u root -p -h $MYSQL_PORT_3306_TCP_ADDR
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.15 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
```

- nginxを起動してwelcomeページが表示されるかテスト
  - (上記のmysqlからexitで出た後の想定)
  - 下記コマンドを入力後 http://localhost:8080 にアクセスして`Welcome to nginx!`と出ればOK

```sh
$ nginx
```

- 以上で最低限の環境はできた

## 参考
- https://qiita.com/teradonburi/items/8c23806e20ec8efc0ef4
- https://qiita.com/mokrai/items/309e7312bdf3d2428339