Stan's blog

Docker Laravel

Laravel - два способа поставить в Docker: руками или через Sail

26 февраля 2024
Kandinsky: "Laravel - два способа поставить в Docker: руками или через Sail", стиль: anime

Вручную

Использовать bitnami сборку 
mkdir ~/myapp && cd ~/myapp
docker run --name laravel -v ${PWD}/my-project:/app bitnami/laravel:latest
Это создаст в директории  myapp проект my-project
Далее, для запуска проекта создадим docker-compose.yml
# docker-compose.yml
version: '3'

networks:
  laravel:

services:

  laravel:
    image: bitnami/laravel:latest
    restart: unless-stopped
    ports:
      - 8000:8000
    volumes:
      - ./my-project:/app
    networks:
      - laravel
  mysql:
    image: mariadb:11.3
    restart: unless-stopped
    tty: true
    volumes:
      - ./my-data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    networks:
      - laravel

  redis:
    image: redis:alpine
    restart: unless-stopped
    networks:
      - laravel
И подправим  my-project/.env
APP_NAME=Laravel
APP_ENV=dev
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Я не стал прокидывать порты для redis и mysql, это всегда можно сделать при необходимости. Да и зачем, если можно подключиться к контейнеру по его IP.

Sail

Mysql 8.0.4 отказался перезапускаться, сообщая, что что-то не так с файлами базы и был заменен на MariaDB.
curl -s "https://laravel.build/example-app?with=mariadb,redis&devcontainer" | bash
Это сделает все, включая создание docker compose.
У меня есть локальный mysql и redis, поэтому в example-app/.env добавил 
FORWARD_REDIS_PORT=6380
FORWARD_DB_PORT=3307
Старт проекта осуществляется через
./vendor/bin/sail up
Если надо создать базу и пользователя
docker compose exec mariadb bash

CREATE DATABASE laravel;
CREATE USER 'sail'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'sail'@'%' WITH GRANT OPTION;