# 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
2022-04-02

同じタグを持つ記事をピックアップしました。