🙈
【php】DockerでPHPの学習用の環境構築した
はじめに
気分転換に元々、バックエンドはPHPを使っていたのでDockerの学習用環境を構築してみた。
Laravelの学習は以下の内容を参考に学習してほしい。
環境
- PHP 8.1.10 (cli)
- Laravel 8.83.24
- MySql 5.7
下準備
composerの設定
ここで、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 /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
を使った方がいいよってツイートだけ紹介しておきます。
Discussion