今回はDocker, docker-composeを使ってローカルに以下の環境を構築します。(LEMP環境)
- Laravel 8.0
- PHP 8.0
- Nginx
- MySQL 5.7
前提条件
- Docker がローカルにインストールされている
- Docker Compose がローカルにインストールされている
使用するOSによってdockerのインストール方法が異なりますので、公式サイトよりダウンロードしてください。
はじめに
まず初めに、プロジェクト用のディレクトリを作成します。
名前はなんでも構いませんが、laravel_docker
という名前の新しいディレクトリを作成しました。
mkdir laravel_docker
cd laravel_docker
環境構築用のディレクトリ作成
次に、先ほど作成したディレクトリ(laravel_docker)に以下のような構造を作成してください
docker-compose.ymlの設定
docker-compose.ymlを設定しましょう。
touch docker-compose.yml
docker-compose.ymlは、複数のコンテナをまとめて立ち上げて管理するためのファイルです。イメージを複数指定することで、複数のコンテナを立ち上げることが可能となります。
version: '3'
services:
app:
container_name: app
build: ./docker/php
volumes:
- .:/var/www
nginx:
image: nginx
container_name: nginx
ports:
- 8000:80
volumes:
- .:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
working_dir: /var/www
depends_on:
- app
db:
image: mysql:5.7
container_name: db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: database
MYSQL_USER: db-user
MYSQL_PASSWORD: db-pass
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
container_nameでは、コンテナ名を明示的に指定します。ここに指定した名前が、docker-compose psしたときにNameとして表示されます。
MySQLのデフォルトポート番号は3306のため、今回は3306を指定しています。
php > php.iniの設定
php.iniの設定をしましょう。
php.iniは、phpの設定ファイルです。
mkdir php && cd php
touch php.ini Dokerfile
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[opcache]
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
php > Dockerfileの設定
次にPHPのDockerfileの設定です。
Dockerfileとは要は、「image(コンテナの素)を生成するファイル」です。
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"
nginx > default.confの設定
次に、default.confでNginxの設定をします。
mkdir nginx && cd nginx
touch default.conf
server {
listen 80;
root /var/www/laravel-project/public;
index index.php;
location / {
root /var/www/laravel-project/public;
index index.php;
try_files $uri $uri/ /index.php$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
コンテナの立ち上げ
以上までのファイルが設定できましたらコンテナを立ち上げます。
docker-compose up -d
さまざまな処理が終わると、以下のコマンドでコンテナが立ち上がっているかを確認することができます。
docker-compose ps
全てのコンテナのStateがUpになっていたらコンテナはちゃんと立ち上がっています。
Laravelアプリを作成
コンテナの中に入りLaravelのアプリを作成していきます。
docker-compose exec app bash
コンテナ内で以下のコマンドを入力してください。
composer create-project --prefer-dist laravel/laravel laravel-project "6.*"
すると、/var/www以下に、以下のようにLaravelアプリが作成されます(laravel-project)。
ブラウザでLravel画面の確認
実際にブラウザでLravel画面が表示される確認します。
localhost:8000
8000は、nginxのところに設定したポート番号です
上記のようにLaravelのwelcomeページが表示されると成功です。