はじめに
最近は現場でも、Docker環境下でLaravleを触ることが増えて少しは知見も溜まってきたので、得た知見を忘れないように忘備録として残しておきます.
ここでは、docker
やdocker-compose
のインストールに関しては触れませんので、まだの方はこちらの記事がわかりやすかったので参考にしてみてください.
構成
任意のディレクトリにSampleProject
を作成して下記のディテクトり構成で環境を構築します.
SampleProject
├── docker-compose.yml
├── docker
│ ├── php
│ │ ├── Dockerfile
│ │ └── php.ini
│ └── nginx
│ └── default.conf
└── src
└── Laravelのプロジェクトファイル
docker-compose.ymlの中身
docker-compose.yml
は複数のコンテナを同時に動かすためのツールである、Docker Compose
を利用するために使用するymlファイルです.
version: '3'
services:
php:
build: ./docker/php
volumes:
- ./src:/var/www
nginx:
image: nginx
ports:
- 80:80
volumes:
- ./src:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sample_project
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
node:
image: node:12.13-alpine
tty: true
volumes:
- ./src:/var/www
working_dir: /var/www
Dockerfileの中身
Dockerfile
とはDocker上で動作させるコンテナの構成情報を記述するためのファイルです.
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
&& docker-php-ext-install zip pdo_mysql
#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
php.iniの中身
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
default.confの中身
default.conf
はngninxの設定情報を記述するためのファイルです.
server {
listen 80;
index index.php index.html;
root /var/www/sampleProject/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
環境構築の手順
はじめに任意の場所にSampleProject
を作成する.
~/ $ mkdir SampleProject
docker-compose.yml
ファイルを作成して、中身は冒頭で紹介したdocker-compose.yml
の内容をコピペする.
~/SampleProject $ touch docker-compose.yml
Dockerfile
とphp.ini
を作成して、中身は冒頭で紹介したそれぞれのファイルの内容をコピペする.
~/SampleProject/docker/php $ touch Dockerfile
~/SampleProject/docker/php $ touch php.ini
defalt.conf
ファイルを作成して、中身は冒頭で紹介したdefault.conf
の内容をコピペする.
~/SampleProject/nginx $ touch default.conf
docker-compose.yml
ファイルがあるディレクトリ内で下記コマンドを実行してdocker
を起動する.
~/SampleProject $ docker-compose up -d
Creating php ... done
Creating db-host ... done
Creating sampleproject_node ... done
Creating nginx ... done
PHPのコンテナ内に入る.
~/SampleProject $ docker-compose exec php bash
PHPコンテナ内でLaravelプロジェクトを作成する.
root@7eb4359bf51c:/var/www# laravel new sampleProject
Laravelのプロジェクトが入っているか確認する.
バージョンが出力されればOKです.
root@7eb4359bf51c:/var/www/sampleProject# php artisan --version
Laravel Framework 9.10.0
PHPコンテナを抜ける.
root@7eb4359bf51c:/var/www# exit
これでSampleProject/src
内にLaravelのプロジェクトファイルが作成され、
http://localhost/ にアクセスするとおなじみのWelcomeページが表示されます.
MySQLコンテナに入る.
~/SampleProject $ docker-compose exec db bash
コンテナ内でMySQLにログイン.
root@630fbaf32806:/# mysql -u root -proot
今回のプロジェクトで使用するデータベースを作成する.
データベース名はdocker-compose.ymlで指定した、MYSQL_DATABASE
と合わせる必要があります.
mysql> mysql> CREATE DATABASE sample_project;
Query OK, 1 row affected (0.01 sec)
Laravelのプロジェクトファイル内の.env
ファイルを下記に修正する.
DB_CONNECTION=mysql
DB_HOST=db # docker-compose.ymlに記載したDBのサービス名
DB_PORT=3306
DB_DATABASE=sample_project # 使用するDB名
DB_USERNAME=root
DB_PASSWORD=root
PHPコンテナに入る.
~/SampleProject $ docker-compose exec php bash
phpコンテナ内でマイグレーションを実行する.
root@7eb4359bf51c:/var/www# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.04 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.02 seconds)
マイグレーションが無事に実行されれば成功です!!