🙈

【php】DockerでPHPの学習用の環境構築した

2022/09/25に公開

はじめに

気分転換に元々、バックエンドはPHPを使っていたのでDockerの学習用環境を構築してみた。
Laravelの学習は以下の内容を参考に学習してほしい。

https://readouble.com/laravel/8.x/ja/installation.html

環境

  • PHP 8.1.10 (cli)
  • Laravel 8.83.24
  • MySql 5.7

下準備

composerの設定

https://getcomposer.org/doc/00-intro.md#docker-image

ここで、nginxの設定について調べて見てください。

https://hub.docker.com/_/nginx

ディレクトリ構成

.
├── ./README.md
├── ./docker
│   ├── ./app
│   │   ├── ./Dockerfile
│   │   └── ./php.ini
│   ├── ./mysql
│   │   ├── ./conf.d/
│   │   ├── ./my.cnf
│   │   └── ./sqls/
│   ├── ./nginx
│   │   └── ./conf.d
│   │       └── ./conf.d/default.conf
│   └── ./node
│       └── ./Dockerfile
├── ./docker-compose.yml
└── ./laravel

dockerファイル

docker-compose.yaml
version: "3.9"

services:
    laravel-web:
        container_name: laravel-web
        image: nginx
        volumes:
            - ./docker/nginx/conf.d:/etc/nginx/conf.d
            - ./laravel:/var/www
        ports:
            - "9080:80"
        depends_on:
            - laravel-app

    laravel-app:
        container_name: laravel-app
        build: ./docker/app/
        environment:
            - APP_ENV=docker
        volumes:
            - ./laravel:/var/www

    laravel-mysql:
        container_name: laravel-mysql
        image: mysql:5.7
        environment:
            MYSQL_DATABASE: 'app'
            MYSQL_ROOT_PASSWORD: 'root'
            TZ: 'Asia/Tokyo'
        command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
        volumes:
            - ./docker/mysql/conf.d:/etc/mysql/conf.d
            - ./docker/mysql/sqls:/docker-entrypoint-initdb.d
        ports:
            - "11306:3306"
Dockerfile
FROM php:8.1-fpm

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

RUN apt update
RUN apt install -y wget git unzip libpq-dev

# Install Node.js 12
RUN apt install -y npm \
    && npm install n -g \
    && n 12

# Install PHP Extensions
RUN apt install -y zlib1g-dev mariadb-client libzip-dev libonig-dev \
    && docker-php-ext-install zip pdo_mysql

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

# Install Composer
RUN composer self-update
RUN composer update

WORKDIR /var/www

RUN chown -R www-data:www-data /var/www

RUN composer global require "laravel/installer"
php.ini
[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.language = Japanese

起動コマンド

docker-compose.yamlがあるフォルダで以下を実行。

$ docker-compose build
$ docker-compose up -d
$ docker-compose exec laravel-app php artisan migrate

これで起動ができる。APIとかWebフロントの実装したりとか色々使えるのでいいのかもしれない。
SQLをPostgreSQL に書き換えてみたりするのもあるだろう。

最後に

連休もあまり時間が取れなくて、やりたかったことができなかった。
flutterの方も Twitterで結構面白そうなロジックとかあったので招待したかったが、
今回は最後にContainer()じゃなくて、SizedBoxを使った方がいいよってツイートだけ紹介しておきます。

https://twitter.com/biz84/status/1572962423702786050?s=21&t=2cXsk0yapqbgKPhj2N8ewg

Discussion