はじめに
Laradockを使わず、Laravelの開発環境をDocker上で構築していきます。
立ち上げるコンテナは、以下3つです。
- nginx
- PHP
- MySQL
環境
- Docker version 18.09.2, build 6247962
- docker-compose version 1.23.2, build 1110ad01
- ホストOS:Mac OS Mojave 10.14.6(18G84)
ディレクトリ構成
$ tree
.
├── docker
│ ├── nginx
│ │ └── default.conf
│ └── php
│ ├── Dockerfile
│ └── php.ini
├── docker-compose.yml
└── server
Docker-composeファイル編集
今回は、nginx、MySQL、PHPの3つのコンテナを立ち上げます。
docker-compose.yml
version: '3'
services:
php: #phpコンテナを定義します。
container_name: php #コンテナの名前
build: ./docker/php #Dockerイメージがあるディレクトリ
volumes:
- ./server:/var/www #データ永続化領域の定義
#今回はホストのserverディレクトリを、コンテナ内/var/wwwディレクトリにマウント
nginx:
image: nginx #nginxの公式イメージを使用
container_name: nginx
ports: #ホスト:コンテナポート間のマッピング
- 8000:80
volumes:
- ./server:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on: # コンテナ起動順番の制御、phpコンテナのあとにnginxコンテナを起動
- php
db:
image: mysql:5.7
container_name: db
environment: #DB環境定義
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: docker
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 #image起動時に実行するSQLやスクリプト
ports:
- 3306:3306
Dockerfile編集
まず、PHPコンテナ構築に必要なDockerfileを編集します。
Composerと、Laravelのインストールも済ませてしまいましょう。
Composerのインストールは、公式サイトを参考にしてください。
/docker/php/Dockerfile
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev default-mysql-client \
&& docker-php-ext-install zip pdo_mysql
#Compose install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
RUN mv composer.phar /usr/local/bin/composer
WORKDIR /var/www
RUN composer global require "laravel/installer"
PHP設定ファイルの編集
/docker/php/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
nginx設定ファイルの編集
Laravel用に、nginxのconfigを編集します。
/docker/nginx/default.conf
server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
root /var/www/public;
index index.html index.php;
}
location ~ \.php$ {
try_files $uri =404;
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;
}
}
Laravelプロジェクトの作成
下記の通り、docker-compose.ymlファイルがあるディレクトリで3つ全てのDockerコンテナを起動します。
その後、PHPコンテナへ入り、Laravelプロジェクトを作成します。
$ docker-compose up -d #バックグラウンドでDockerコンテナを起動
$ docker-compose exec php bash #phpコンテナに入る
$ laravel new #phpコンテナ内で実行、Laravelプロジェクトを作成する
動作確認
ブラウザから、http://127.0.0.1:8000
へアクセスすると以下のように画面が表示されるはずです!
mysqlコンテナも確認しておきましょう。
$ docker-compose exec db bash
$ mysql -u docker -p # dbコンテナ内で実行、パスワードは"docker"
まとめ
DockerでLaravel環境を構築できましたね!