Windows 10 Home でも Docker で Laravel 動いたメモ。
環境
- Windows 10 Home 2004 (Insider Preview build 19041.208)
- Linux 用 Windows サブシステム (WSL2)
- Docker desktop community 2.2.3.0 (Edge channel)
- PHP 7.3
- Laravel 5.8
- Laravel ソースコードは source フォルダに展開済み
- Composer は (Docker内でなく) Windows 側で実行
Docker設定ファイル群
Laravel ソースフォルダ(source)と同階層に docker フォルダを作り、その中に全部入れる。
docker-compose.yml
version: "3"
services:
web:
build: ./web
ports:
- 8080:80
volumes:
- ../source:/var/www/html
mysql:
build: ./mysql
ports:
- 3306:3306
volumes:
- data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: docker
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: Asia/Tokyo
mailhog:
image: mailhog/mailhog
ports:
- 8025:8025
volumes:
data:
※MySQLデータ永続化で実ディレクトリマウントするとMySQLが2回目以降起動しなくなったためデータボリュームを使う。WSL2の問題かもしれないが詳細不明。
.env
COMPOSE_PROJECT_NAME=適当なプロジェクト名
※他のプロジェクトと名前の競合を避けるため自分で名前つける(何もしないとフォルダ名dockerがプロジェクト名になる)
web/Dockerfile
FROM php:7.3-apache
COPY 000-default.conf /etc/apache2/sites-enabled/000-default.conf
COPY php.ini /usr/local/etc/php/php.ini
RUN apt-get update && \
apt-get install -y zip unzip libzip-dev && \
docker-php-ext-install zip pdo_mysql
WORKDIR /var/www/html
web/000-default.conf
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
web/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
mysql/Dockerfile
FROM mysql:5.7
COPY my.cnf /etc/mysql/conf.d/my.cnf
※my.cnfをdocker-compose.ymlのvolumesでバインドするのはWindowsでは権限問題があるためCOPYを使う。
mysql/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
起動
>cd docker
>docker-compose up -d
Creating network "docker_default" with the default driver
Creating docker_mailhog_1 ... done
Creating docker_web_1 ... done
Creating docker_mysql_1 ... done
>docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
docker_mailhog_1 MailHog Up 1025/tcp, 0.0.0.0:8025->8025/tcp
docker_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
docker_web_1 docker-php-entrypoint apac ... Up 0.0.0.0:8080->80/tcp
コンテナログイン
>docker-compose exec web bash
>docker-compose exec mysql bash
※exitでログアウト
Laravel
.env (抜粋)
APP_URL=http://localhost:8080
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=docker
DB_USERNAME=docker
DB_PASSWORD=docker
MAIL_HOST=mailhog
MAIL_PORT=1025
Laravel: http://localhost:8080/
MailHog: http://localhost:8025/
停止
>docker-compose stop
削除
いろんなプロジェクトでDocker環境を作ってるとどんどんコンテナ・イメージ・ボリューム・ネットワークが蓄積されていくのでたまに削除する。