Добавьте новую услугу с помощью laravel sail

#laravel #docker #laravel-sail

Вопрос:

У меня есть проект laravel 8, созданный с помощью composer. Затем я добавил laravel sail, composer require laravel/sail а затем выполнил команду php artisan sail:install . После sail up команды mysql был создан только контейнер, и все работает хорошо. Но теперь я хочу добавить redis в свой контейнер docker. Как я могу это сделать? Я ничего не знаю о докере, но laravel sail очень упростил использование докера. Я хочу добавить redis с помощью laravel sail. Есть ли какой-нибудь способ сделать это?

Ответ №1:

вы можете редактировать docker-compose.yml

В services

 laravel.test:
...
        depends_on:
            - mysql
            - redis
...
 
     redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
        healthcheck:
          test: ["CMD", "redis-cli", "ping"]
 

затем, наконец, в volumes:

 volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local

 

Вы также можете начать новый проект с

 curl -s "https://laravel.build/example-app?with=mysql,redis" | bash

 

затем обратитесь к сгенерированному docker-compose.yml

после редактирования сохраните его, а затем запустите ./vendor/bin/sail build только тогда saild up -d

Ответ №2:

Я знаю, что это не лучшее решение, но я думаю, что это так просто. Обновите свой docker-compose.yml файл, используя следующие строки:

 version: '3'
services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/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
            - redis
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
            retries: 3
            timeout: 5s
    redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local
 

Ответ №3:

Вы можете просто php artisan sail:install снова выполнить команду

Теперь выберите нужные вам услуги и разделите их с помощью ,

Так, например 0, 3, 7 , это обновит ваш docker-compose.yml файл и добавит строки для MySQL, Redis, Mailhog . Однако это может перезаписать некоторые из ваших старых настроек!

Как только вы снова начнете ходить под парусом, это вызовет услуги, и вы можете идти.