# Docker + laravel + nginx + mysqlでローカル環境構築

<!-- ## Docker Desctopをinstall

```https://www.docker.com/```
今回はdocker hubからinstall

[Docker Hub]('https://hub.docker.com/')

登録をし、emailaddressに確認が送られてくるので  
適宜入力し、downloadpageへ進む  

現在は```Intel chip```なのでそちらをdonwload  
fileを開き、applicationとして起動  
簡単なコマンドチュートリアルを行う
メニューバーにアイコンが出て、statusが確認できる  
```Docker Desktop running```

**install完了**

[参考QiitaURL](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)
[参考QiitaURL](https://qiita.com/ama_keshi/items/b4c47a4aca5d48f2661c)

---
-->
### ```docker-compose.yml```ファイルの作成

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

services:
    app:
        # php コンテナ
        build:
            context: .
            dockerfile: ./app/Dockerfile
        volumes:
            - ./src/:/app
    web:
        # nginx コンテナ
        build:
            context: .
            dockerfile: ./docker/web/Dockerfile
        ports:
            - 8080:80
        depends_on:
            - app
        volumes:
            - ./src/:/app
    db:
        # mysql コンテナ
        build:
            context: .
            dockerfile: ./docker/db/Dockerfile
        ports:
            - 3306:3306
        environment:
            MYSQL_DATABASE: database
            MYSQL_USER: user
            MYSQL_PASSWORD: password
            MYSQL_ROOT_PASSWORD: password
            TZ: 'Asia/Tokyo'
        volumes:
            - mysql-volume:/var/lib/mysql
volumes:
    mysql-volume:
```

### 各Dockerfile

#### app(php)
```
FROM php:8.0-fpm

ENV TZ Asia/Tokyo

RUN apt-get update && \
    apt-get install -y git unzip libzip-dev libicu-dev libonig-dev && \
    docker-php-ext-install intl pdo_mysql zip bcmath

COPY ./app/php.ini /usr/local/etc/php/php.ini

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer

WORKDIR /app
```

#### web(nginx)
```
FROM nginx:1.20-alpine

ENV TZ Asia/Tokyo

COPY ./docker/web/default.conf /etc/nginx/conf.d/default.conf
```

#### db(mysql)
```
FROM mysql:8.0

COPY ./docker/db/my.conf /etc/my.conf
```

- 3つのコンテナが作成される
```docker-compose up -d --build```

```
laravel % docker container ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED             STATUS             PORTS                               NAMES
b8e098958ac0   laravel_db    "docker-entrypoint.s…"   9 seconds ago       Up 7 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   laravel-db-1
c569c60a1811   laravel_web   "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp                laravel-web-1
06ad6812158d   laravel_app   "docker-php-entrypoi…"   About an hour ago   Up About an hour   9000/tcp                            laravel-app-1
```

### mysql接続確認

```
//  dbコンテナに入る
laravel % docker-compose exec db bash

root@b8e098958ac0:/# mysql -u root -p
// この段階では、ymlファイル内のpassword入力
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.29 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>
```
<!-- できたああああああ！ -->

### appコンテナからdbコンテナへ接続

laravel installでできたsrc/.envファイルにymlファイルに定義した内容を指定
DB_HOSTにはMySQLコンテナのサービス名

```src/.env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=password
```

マイグレーションを実行して、接続確認
```
laravel % docker-compose exec app bash
root@0b8668e3911e:/app# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (63.47ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (51.16ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (49.98ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (59.13ms)
root@0b8668e3911e:/app#
```

```
root@b8e098958ac0:/# mysql -u root -p
mysql> use database;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------------+
| Tables_in_database     |
+------------------------+
| failed_jobs            |
| migrations             |
| password_resets        |
| personal_access_tokens |
| users                  |
+------------------------+
5 rows in set (0.00 sec)

mysql>
```
[参考](https://qiita.com/hinako_n/items/f15646ea548bcdc8ac6c)