# Laravel Sail で Docker 環境構築
Laravel Sail は、ローカル環境を構築することなく Docker 開発環境使って PHP MySQL の Laravel アプリを構築することができます。
sail:install
php artisan sail:installコマンドはdocker-compose.ymlファイルの作成を手伝います。
php artisan sail:install
Sail 立ち上げ
./vendor/bin/sail up
# パス通してから
sail up
sail エイリアス使うためにパス通す
~/.zshrc
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
# Sail コマンド
- 開始 up
- 開始(デタッチモード) up -d
- 停止 stop
# sail 環境のマイグレーション操作
sail artisan migrate
# phpバージョン確認
sail php --version
PHP 8.1.3 (cli) (built: Feb 21 2022 14:48:58) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies
with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies
with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans
# docker-compose.yml
DB が mysql の場合
# For more information: https://laravel.com/docs/sail
version: "3"
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.1
dockerfile: Dockerfile
args:
WWWGROUP: "${WWWGROUP}"
image: sail-8.1/app
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "${APP_PORT:-80}:80"
environment:
WWWUSER: "${WWWUSER}"
LARAVEL_SAIL: 1
XDEBUG_MODE: "${SAIL_XDEBUG_MODE:-off}"
XDEBUG_CONFIG: "${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}"
volumes:
- ".:/var/www/html"
networks:
- sail
depends_on:
- mysql
mysql:
image: "mysql/mysql-server:8.0"
ports:
- "${FORWARD_DB_PORT:-3306}:3306"
environment:
MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: "${DB_DATABASE}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- "sail-mysql:/var/lib/mysql"
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local
# Laravel Sail に DB アクセス
ローカルマシンからデータベースに接続するには、DB 管理ツールを使用して localhost のポート 3306 からアクセスできます。
ローカルにすでに別の Mysql DB 構築しているので、phpMyAdmin を入れます。
mysql の後ろに phpmyadmin の設定追加して sail up
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
ports:
- 8080:80
environment:
PMA_USER: "${DB_USERNAME}"
PMA_PASSWORD: "${DB_PASSWORD}"
PMA_HOST: mysql
networks:
- sail
# laravel コマンドのパス通す
~/.bash_profile
~/.zshrc
export PATH=$HOME/.composer/vendor/bin:$PATH
# bashの場合
source ~/.bash_profile
# zshの場合
source ~/.zshrc
# Dockerfile
- web
- mysql
- ngrok
- mailhog
- minio
Docker で一通りの環境を構築する Dockerfile の一例
# For more information: https://laravel.com/docs/sail
version: "3"
services:
web:
build:
context: ./vendor/laravel/sail/runtimes/8.1
dockerfile: Dockerfile
args:
WWWGROUP: "${WWWGROUP}"
image: sail-8.1/app
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "${APP_PORT:-80}:80"
- "${VITE_PORT:-5173}:${VITE_PORT:-5173}"
environment:
WWWUSER: "${WWWUSER}"
LARAVEL_SAIL: 1
XDEBUG_MODE: "${SAIL_XDEBUG_MODE:-off}"
XDEBUG_CONFIG: "${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}"
volumes:
- ".:/var/www/html"
networks:
- sail
depends_on:
- mysql
mysql:
image: "mysql/mysql-server:8.0"
ports:
- "${FORWARD_DB_PORT:-3306}:3306"
environment:
MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: "${DB_DATABASE}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- "sail-mysql:/var/lib/mysql"
- "./vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh"
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
ngrok:
image: wernight/ngrok:latest
ports:
- 4040:4040
env_file:
- .env
environment:
NGROK_PROTOCOL: http
NGROK_PORT: web:80
depends_on:
- web
networks:
- sail
mailhog:
image: "mailhog/mailhog:latest"
ports:
- 1025:1025
- 8025:8025
networks:
- sail
minio:
image: minio/minio:latest
ports:
- 9000:9000
- 9001:9001
environment:
- MINIO_ROOT_USER=${AWS_ACCESS_KEY_ID}
- MINIO_ROOT_PASSWORD=${AWS_SECRET_ACCESS_KEY}
- MINIO_REGION=${AWS_DEFAULT_REGION}
entrypoint: bash
command: -c "/opt/bin/minio --help && /opt/bin/minio server /data --console-address ':9001'"
volumes:
- ./storage/minio:/data
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local