【Laravel入門】Laravel SailでDokerを使って開発環境の構築
今回はSailを使ってLaravel でDokerを使って開発環境の構築をしていきます。
Sail(セイル)とは
Laravel Sail(セイル)は、Laravel AppのDocker開発環境を操作するための軽量コマンドラインインターフェイスです。
Sailは、Dockerの経験、知見がなくても環境構築ができます。
今回は、PHP、MySQL、phpMyadminを使用してLaraveの環境構築を行います。
Laravelプロジェクトの作成
以下コマンドで、Laravelのプロジェクトを生成します。
curl -s https://laravel.build/アプリ名 | bash
しばらく、時間がかかりますので待ちましょう。
Last login: Fri Jul 21 13:17:22 on ttys022
kami@kami ~ % cd Desktop/work/dev
kami@kami dev % curl -s https://laravel.build/laravel-app | bash
Docker is not running.
kami@kami dev %
[復元日時2023/07/21 13:29:09]
Last login: Fri Jul 21 13:29:01 on console
Restored session: 2023年 7月21日 金曜日 13時28分16秒 JST
kami@kami dev % curl -s https://laravel.build/laravel-app | bash
latest: Pulling from laravelsail/php82-composer
Digest: sha256:37549f980be6146efcb16b0dc352644edfc5cca32b9862494631eb197ef89737
Status: Image is up to date for laravelsail/php82-composer:latest
_ _
| | | |
| | __ _ _ __ __ ___ _____| |
| | / _` | '__/ _` \ \ / / _ \ |
| |___| (_| | | | (_| |\ V / __/ |
|______\__,_|_| \__,_| \_/ \___|_|
// 以下省略
「Please provide your password so we can make some final adjustments to your application’s permissions.」が表示された後はパスワード入力してください
Please provide your password so we can make some final adjustments to your application's permissions.
Password:
「Thank you! We hope you build something incredible.」が実行されれば、プロジェクト作成ができています。
Thank you! We hope you build something incredible. Dive in with: cd laravel-app && ./vendor/bin/sail up
カレントディレクトリをlarave-appに移動へと「./vendor/bin/sail」のコンテナを起動させてください。
スポンサードサーチ
Dockerデスクトップでイメージ確認
Docker Desktopを見てもらえればわかるように、「laravelsail/php81-composer」という名前のイメージが作成されています。
「laravelsail/php81-composer」というDockerイメージを利用しているようです。
docker info > /dev/null 2>&1
# Ensure that Docker is running...
if [ $? -ne 0 ]; then
echo "Docker is not running."
exit 1
fi
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php82-composer:latest \
bash -c "laravel new laravel-app && cd laravel-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "
cd laravel-app
# Allow build with no additional services..
if [ "mysql redis meilisearch mailpit selenium" == "none" ]; then
./vendor/bin/sail build
else
./vendor/bin/sail pull mysql redis meilisearch mailpit selenium
./vendor/bin/sail build
fi
CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
BOLD='\033[1m'
NC='\033[0m'
echo ""
if sudo -n true 2>/dev/null; then
sudo chown -R $USER: .
echo -e "${BOLD}Get started with:${NC} cd laravel-app && ./vendor/bin/sail up"
else
echo -e "${BOLD}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
echo ""
sudo chown -R $USER: .
echo ""
echo -e "${BOLD}Thank you! We hope you build something incredible. Dive in with:${NC} cd laravel-app && ./vendor/bin/sail up"
fi
Laravel Sailを起動
Sailコマンドを使用してDockerコンテナを起動します。
laravel-app % ./vendor/bin/sail up
Laravel Sailをバッググラウンドで起動
Sailコマンドを使用してDockerコンテナをバックグラウンドで起動します。
laravel-app % ./vendor/bin/sail up -d
laravel-app % ./vendor/bin/sail up -d
[+] Running 10/10
⠿ Network laravel-app_sail Cr... 0.0s
⠿ Volume "laravel-app_sail-meilisearch" Created 0.0s
⠿ Volume "laravel-app_sail-mysql" Created 0.0s
⠿ Volume "laravel-app_sail-redis" Created 0.0s
⠿ Container laravel-app-mysql-1 Started 0.8s
⠿ Container laravel-app-meilisearch-1 Started 0.8s
⠿ Container laravel-app-redis-1 Started 0.6s
⠿ Container laravel-app-mailpit-1 Started 0.7s
⠿ Container laravel-app-selenium-1 Started 0.6s
⠿ Container laravel-app-laravel.test-1 Started 1.6s
スポンサードサーチ
ローカルサーバーでLaravelのアプリページを確認する
localhostでローカルサーバー上で、Lalavel-appページ確認ができます。
もし、別でローカルサーバーで同じ起動している場合は、サーバーを切ってください。
※他のポート番号のローカルサーバーの場合は問題ありません。
Laravel Sailを停止
Sailコマンドを使用してDockerコンテナを閉じます。
./vendor/bin/sail stop
スポンサードサーチ
sailコマンドをエイリアス対応する
「.bashrc」を起動して、下記のaliasをコピペしてください。
alias sail="./vendor/bin/sail"
alisa sail
// sail=./vendor/bin/sail
以降は「laravel-app」ディレクトリで「sail」と実行すれば「./vendor/bin/sail」が実行されます。
sail up
sail up -d
sail stop
phpMyAdminを追加
phpmyadminを追加するにはdocker-composer.ymlを編集します。
docker-composer.ymlとはDockerコンテナの情報を定義するファイルです。
以下のコードをdocker-composer.ymlに記述します。
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
ports:
- 8080:80
environment:
MYSQL_USERNAME: '${DB_USERNAME}'
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
PMA_HOST: mysql
networks:
- sail
全体のコード
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/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}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
- meilisearch
- mailpit
- selenium
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
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
ports:
- 8080:80
environment:
MYSQL_USERNAME: '${DB_USERNAME}'
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
PMA_HOST: mysql
networks:
- sail
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sail-redis:/data'
networks:
- sail
healthcheck:
test:
- CMD
- redis-cli
- ping
retries: 3
timeout: 5s
meilisearch:
image: 'getmeili/meilisearch:latest'
ports:
- '${FORWARD_MEILISEARCH_PORT:-7700}:7700'
volumes:
- 'sail-meilisearch:/meili_data'
networks:
- sail
healthcheck:
test:
- CMD
- wget
- '--no-verbose'
- '--spider'
- 'http://localhost:7700/health'
retries: 3
timeout: 5s
mailpit:
image: 'axllent/mailpit:latest'
ports:
- '${FORWARD_MAILPIT_PORT:-1025}:1025'
- '${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025'
networks:
- sail
selenium:
image: seleniarm/standalone-chromium
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local
sail-redis:
driver: local
sail-meilisearch:
driver: local
ログイン不要にする場合
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql:mysql
ports:
- 8080:80
environment:
PMA_USER: "${DB_USERNAME}"
PMA_PASSWORD: "${DB_PASSWORD}"
PMA_HOST: mysql
networks:
- sail
phpmyadminへアクセス
ログイン時のユーザー名とパスワードは以下になります。
ユーザー名 | パスワード |
---|---|
sail | password |
この情報は「.env」ファイルに記述されています。