はじめに
この記事は、とりあえずDocker上にLaravelを構築する流れを記載しています。
各ファイルの設定内容などの詳細については、下記の記事を参照いただけたらと思います。
【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
windows 10 home で docker を導入するメモ
導入環境
Windows10 Home 64bit
Intel(R) Core(TM) i7-4500U CPU
構築環境
PHP 7.3.12
nginx/1.17.6
mysql Ver 8.0.18
Laravel Framework 6.0.4
DockerToolbox-19.03.1
Docker
windows10 HomeではDocker for Windowsはインストールできないので、Docker Toolboxをインストールする
1.「Docker Toolbox」のダウンロード
下記のURLにアクセスし、Toolbox Releases をクリック
https://docs.docker.com/toolbox/overview/
DockerToolbox-19.03.1をダウンロードする
2. ダウンロードしたファイルを実行
3. インストールが開始:「Next」を押して継続
「Help Docker improve Toolbox」のチェックは外してContinueをクリックします。
4. インストール先の確認:「Next」を押して次画面に
5. インストールするコンポーネントの選択:「Next」を押して次画面に
virtualBoxがすでにインストールされている場合は、virtualBoxのチェックを外す。
6. 追加設定:「Next」を押して次画面に
Install VirtualBox with NDIS5 driver[default NDIS6のチェックを外す。
※チェックを入れるとVirtualboxのバグで起動できない。
Error setting up host only network on machine start: The host-only adapter we just created is not visible. This is a well known VirtualBox bug. You might want to uninstall it and reinstall at least version 5.0.12 that is is supposed to fix this issue
7. インストールの開始:「Install」を押してインストールを開始
8. インストール:インストールが完了するまでお待ち下さい
9. インストールが無事完了しましたので「Finish」を押してインストールを終了してください
10.「Docker」の起動確認
Docker Quickstart Terminalをクリック
Laravel
1. 作業ディレクトリを作成
$ mkdir docker-laravel
$ cd docker-laravel
ディレクトリ構成
.
├── README.md
├── docker
│ ├── mysql
│ │ └── Dockerfile
│ │ └── my.cnf
│ ├── nginx
│ │ └── default.conf # nginxの設定ファイル
│ └── php
│ ├── Dockerfile
│ └── php.ini
├── docker-compose.yml
├── logs
│ ├── access.log # nginxのアクセスログ
│ ├── error.log # nginxのエラーログ
│ ├── mysql-error.log
│ ├── mysql-query.log
│ ├── mysql-slow.log
│ └── php-error.log
└── src # Laravelをインストールするディレクトリ
2. 環境ファイル(.env)を作成
$ vim .env
DB_NAME=homestead
DB_USER=homestead
DB_PASS=secret
TZ=Asia/Tokyo
※パスワードは適宜変更してください。
3. docker-compose.yml
$ vim docker-compose.yml
version: "3"
services:
app: # アプリケーションサーバ用コンテナ
build:
context: ./docker/php
args:
- TZ=${TZ}
volumes:
- ./src:/work
- ./logs:/var/log/php
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
working_dir: /work
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USER}
- DB_PASSWORD=${DB_PASS}
- TZ=${TZ}
web: # Webサーバ用コンテナ
image: nginx:1.17-alpine
depends_on:
- app
ports:
- 80:80
volumes:
- ./src:/work
- ./logs:/var/log/nginx
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
environment:
- TZ=${TZ}
db: # DBサーバ用コンテナ
build: ./docker/mysql
volumes:
- db-store:/var/lib/mysql-files
- ./logs:/var/log/mysql
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- TZ=${TZ}
volumes:
db-store:
4. PHP
Dockerfile
$ mkdir -p docker/php
$ vim docker/php/Dockerfile
FROM php:7.3-fpm-alpine
LABEL maintainer "your-name"
ARG TZ
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
RUN set -eux && \
apk add --update-cache --no-cache --virtual=.build-dependencies tzdata && \
cp /usr/share/zoneinfo/${TZ} /etc/localtime && \
apk del .build-dependencies && \
docker-php-ext-install bcmath pdo_mysql && \
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer && \
composer config -g repos.packagist composer https://packagist.jp && \
composer global require hirak/prestissimo
php.ini
$ vim docker/php/php.ini
error_reporting = E_ERROR | E_WARNING | E_PARSE | E_NOTICE
display_errors = stdout
display_startup_errors = on
log_errors = on
error_log = /var/log/php/php-error.log
upload_max_filesize = -1
memory_limit = -1
post_max_size = 100M
max_execution_time = 900
max_input_vars = 100000
default_charset = UTF-8
[Date]
date.timezone = ${TZ}
[mbstring]
mbstring.language = Japanese
5. MySQL
Dockerfile
$ mkdir -p docker/mysql
$ vim docker/mysql/Dockerfile
FROM mysql:latest
ADD ./my.cnf /etc/mysql/my.cnf
RUN chmod 644 /etc/mysql/my.cnf
my.cnf
$ vim docker/mysql/my.cnf
[mysqld]
# character set / collation
character-set-server = utf8mb4
collation-server = utf8mb4_bin
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# MySQL8 caching_sha2_password to mysql_native_password
default-authentication-plugin = mysql_native_password
# Error Log
log-error = /var/log/mysql/mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
6. nginx
$ mkdir -p docker/nginx
$ vim docker/nginx/default.conf
server {
listen 80;
root /work/public;
index index.php;
charset utf-8;
location / {
root /work/public;
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;
}
}
7. サービス用のコンテナの構築
$ docker-compose up -d --build
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
docker-laravel_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
docker-laravel_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
8. PHPのバージョン確認(コンテナの外からコマンド実行)
docker-compose exec app php -v
PHP 7.3.12 (cli) (built: Nov 22 2019 11:50:51) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.12, Copyright (c) 1998-2018 Zend Technologies
9. nginxのバージョン確認
docker-compose exec web nginx -v
nginx version: nginx/1.17.6
10.MySQLのバージョン確認
docker-compose exec db mysql -V
mysql Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)
11. Laravelをインストールする
$ docker-compose exec app ash
/work # composer create-project --prefer-dist "laravel/laravel=6.*" .
/work # php artisan -V
Laravel Framework 6.0.4
/work # exit
12. マイグレーション実行
$ docker-compose exec app ash
/work # php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
/work # exit
13. Laravel トップ画面の表示
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.xx.xxx:8000
Laravelのトップ画面が表示されることを確認できれば完了。
おわりに
手順通りやれば、とりあえずDocker上にLaravelを構築出来るように書いたつもりですが、うまくいかないところや不足しているところはコメントなどで指摘してくださると助かります。
ひとまず構築し、参照記事を確認しながら、色々設定を変えることで理解が深まると思います。