少し前に書いたDockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part1 Part2の続きです。
細かい説明が不要な場合は本記事から読んでいただいても大丈夫です。
まず、Laravelの開発環境をDockerで構築する場合には、Laradockが便利です。
ただ、LaradockはLaravelだけに最適化された開発環境というわけでないので、
Laravelだけをやりたいのであれば、ややファットな印象があります。
そこで、今回はLaradockを使用せずに、シンプルな構成でLaravel用の開発環境を構築してみたいと思います。
では、上記の記事で紹介した構成からLaravelのインストールを行なっていきたいと思います。
作業用のディレクトリは下記のようになっていると思います。
.
├── docker-compose.yml
├── mysql
│ └── mysql-data
├── php
│ └── Dockerfile
├── src
└── web
└── default.conf
ファイルは下記のとおりです。
docker-compose.yml
version: '3'
services:
web:
image: nginx:1.15.6
ports:
- "8000:80"
depends_on:
- app
volumes:
- ./web/default.conf:/etc/nginx/conf.d/default.conf
- ./src:/var/www/
app:
build: ./php
depends_on:
- mysql
volumes:
- ./src:/var/www/
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: test
MYSQL_USER: root
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"
volumes:
- ./mysql/mysql-data:/var/lib/mysql
php/Dockerfile
FROM php:7.2.15-fpm RUN docker-php-ext-install pdo_mysql
web/default.conf
server {
listen 80;
root /var/www/;
index index.php index.html;
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 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;
}
}
mysql/mysql-dataには、mysqlのデータが格納されていて、srcにはソースファイルを格納しておきます。
では、Laravelをインストールしましょう。
まずは、ローカルでの作業用にworkspaceコンテナを準備します。
workspaceディレクトリを作成して、Dockerfileを用意しましょう。
$ mkdir workspace $ cd workspace $ vi Dockerfile
FROM php:7.2.15-fpm
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
git \
curl \
vim \
zip \
unzip \
&& apt-get clean
RUN docker-php-ext-install pdo_mysql
RUN curl -s http://getcomposer.org/installer | php && \
echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \
mv composer.phar /usr/local/bin/composer
RUN . ~/.bashrc
WORKDIR /var/www/
docker-compose.yml
workspace:
build: ./workspace
volumes:
- ${APP_CODE_PATH_HOST}:/var/www/
ports:
- "22:22"
docker-compose upしてみましょう
$ docker-compose up -d $ docker-compose exec workspace bash
workspaceコンテナ内で下記のコマンドを入力します。
$ composer create-project --prefer-dist laravel/laravel .
インストールが終わったら、コンテナから一旦抜けます。
続いて、Laravelの公開ディレクトリをドキュメントルートにする必要があるので、web/default.confを変更します。
server {
listen 80;
root /var/www/public; #←ここを変更
index index.php index.html;
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 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 restartし、localhost:8000にアクセスすると、Laravelのwelcomeページが表示されているはずです。
続いて、laravelの.envファイルにDBへの接続情報を書き込みます。
.envファイルは、上記の例だとsampleappディレクトリの直下にあります。
DB_CONNECTION=mysql DB_HOST=php_docker_mysql_1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=password
DB_HOSTにはmysqlコンテナのコンテナ名を指定します。
コンテナ名を調べるにはPSコマンドを使います。
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
php_docker_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
php_docker_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
php_docker_web_1 nginx -g daemon off; Up 0.0.0.0:8000->80/tcp
php_docker_workspace_1 docker-php-entrypoint php-fpm Up 0.0.0.0:22->22/tcp, 9000/tcp
上記の例だとコンテナ名は「php_docker_mysql_1」になります。
今日は以上です。