#Dockerでlaravel環境を構築してみた
Dockerでlaravel環境を構築した際の手順を備忘録的に残しとこうと思い投稿しました。
##導入ミドルウェア
- HTTPサーバ nginx:1.15.8
- PHP php:7.3-fpm
- DB mysql:8
フォルダ構成
設定ファイルなどの事前に作成するファイルの格納場所を示しています。
project/
├docker-compose.yml
├docker/
└ap/
└Dockerfile
├server/
└ap/
└db/
└web/
└etc/
└nginx/
└conf.d/
default.conf
各種設定ファイルの記載
docker-compose.yml
dockerの構成の大元となるファイルを設定していきます。
HTTPサーバとDB製品に関しては、公式イメージをそのまま使用します。
version: '3'
services:
web:
image: nginx:1.15.8
ports:
- "8000:80"
depends_on:
- ap
# 設定ファイルをnginx に読み込ませる
volumes:
- ./server/web/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
ap:
build: ./docker/ap
depends_on:
- db
# ソースフォルダとして利用する
volumes:
- ./server/ap/application:/var/www/html
db:
image: mysql:8
environment:
MYSQL_DATABASE: dbname
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
# containerを停止してもデータが消えないように永続化する
volumes:
- ./server/db/var/lib/mysql:/var/lib/mysql
Dockerfile
phpの導入に関しては、composerの導入などがあるため、公式イメージ + 作業を記載していきます。
FROM php:7.3-fpm
# composerの導入
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim
# PHPのExtensionsを導入
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql
WORKDIR /var/www/html
default.conf
nginxの設定ファイルを更新します。
server {
listen 80;
# appnameはlaravelプロジェクトの名前を設定
root /var/www/html/appname/public;
index index.php index.html index.htm;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass ap:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
##起動&MySQLのユーザ設定
設定ファイルがかけたらDockerを起動します。docker-compose.ymlのファイルがある箇所で以下を実行する。
docker-compose up -d
MySQL利用者設定
laravelからDB接続する際に、デフォルトだと認証エラーが発生してしまいます。
MySQL8だとデフォルトの認証方式が変わったのですが、laravel側が対応できてないみたいです。
そのため、利用者の設定をするため、dbコンテナに入ります。
docker-compose exec db bash
mysqlの認証方式を変更します。
mysql -u root -p
ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
設定が終わったら、dbコンテナからexitで抜けましょう。
laravelプロジェクトの作成
apコンテナの中に入って、laravelプロジェクトを作成します。
docker-compose exec ap bash
# appnameは好きな名前にしてください
composer create-project --prefer-dist laravel/laravel appname
ここまできたら、laravelプロジェクトにアクセスができるはずです。
http://localhost:8000/
最後にマイグレーションファイルの作成
最後にマイグレーションファイルを作成しましょう!
projeect/server/ap/application/appname配下にある「.env」ファイルのDB定義を書き換えます。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=user
DB_PASSWORD=password
以下のコマンドを入力して、マイグレーションファイルを作成しましょう。
docker-compose exec ap bash
cd appname
php artisan migrate
「Migration table created successfully.」と出力されれば完了です。
最後までみていただき、ありがとうございました。
ミスや不明な点があれば、ご連絡ください。