Как сделать так, чтобы проекты Laravel & Lumen работали одновременно, используя Docker одновременно? - PullRequest
4 голосов
/ 06 марта 2019

Интересно, возможно ли одновременно запустить Laravel + Lumen с помощью Docker? Поэтому я создал новую установку Laravel и Lumen в отдельной папке, поэтому я собираюсь использовать Lumen для API, и я хочу знать, возможно ли запустить их оба, используя только один контейнер.

Я уже пытался изменить порты, но все равно не повезло, Laravel работает без сбоев, но не для Lumen.

Вот файлы, они идентичны, но различия только в портах (я не знаю, правильно ли я делаю)

docker-compose.yml

version: '2'
services:
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    volumes:
      - ./:/var/www
    ports:
      - "8080:80"
    links:
      - app

  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    volumes:
      - ./:/var/www
    links:
      - database
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

  database:
    image: mysql:5.6
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: dockerApp
    ports:
        - "33061:3306"

  cache:
    image: redis:3.0
    ports: 
      - "63791:6379"

app.dockerfile

FROM php:7.1.19-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client \
    && docker-php-ext-install mcrypt pdo_mysql

WORKDIR /var/www

web.dockerfile

FROM nginx:1.10

ADD ./vhost.conf/ /etc/nginx/conf.d/default.conf

WORKDIR /var/www

vhost.conf

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
docker ps

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                      NAMES
33987802df30        test-restful-api_web            "nginx -g 'daemon of…"   34 hours ago        Up About a minute   80/tcp, 443/tcp, 0.0.0.0:32768->8001/tcp   test-restful-api_web_1
7f4b767ff2af        test-restful-api_app            "docker-php-entrypoi…"   34 hours ago        Up About a minute   9000/tcp                                   test-restful-api_app_1
be0675a6804d        redis:3.0                       "docker-entrypoint.s…"   34 hours ago        Up About a minute   6379/tcp, 0.0.0.0:63793->63792/tcp         test-restful-api_cache_1
f0b5fe2db9a4        mysql:5.6                       "docker-entrypoint.s…"   34 hours ago        Up About a minute   3306/tcp, 0.0.0.0:33063->33062/tcp         test-restful-api_database_1
bdb308c7288f        test_web                        "nginx -g 'daemon of…"   34 hours ago        Up About a minute   443/tcp, 0.0.0.0:8080->80/tcp              test_web_1
a74a1b5c2ec7        test_app                        "docker-php-entrypoi…"   34 hours ago        Up About a minute   9000/tcp                                   test_app_1
690b553eae36        mysql:5.6                       "docker-entrypoint.s…"   34 hours ago        Up About a minute   0.0.0.0:33061->3306/tcp                    test_database_1
fc47a3a84484        redis:3.0                       "docker-entrypoint.s…"   34 hours ago        Up About a minute   0.0.0.0:63791->6379/tcp                    test_cache_1

Чего я пытаюсь достичь

Я хочу сделать что-то подобное на хостинге test.com (основной сайт) и api.test.com (для остальных API) , но вместо этого на своей машине я хочу запустить что-то вроде этого (если это возможно) localhost: 8080 (сайт) localhost: 8000/8001 (остальные API)

UPDATE

Я просто делаю изменения для каталога, прежде чем это было так

all_project_folder
---- test // front end project folder which is using Laravel 5.8
-------- * bunch of laravel things
-------- web.dockerfile
-------- app.dockerfile
-------- vhost.conf
-------- docker-compose.yml
---- test-restful-api // restful api project folder which is using Lumen 5.8
-------- * bunch of laravel things
-------- web.dockerfile
-------- app.dockerfile
-------- vhost.conf
-------- docker-compose.yml

Но теперь я уже изменяю это на эту структуру

all_project_folder
---- test // folder for grouping the api and frontend
-------- frontend // test frontend folder which is laravel
-------- * bunch of laravel things
------------ web.dockerfile
------------ app.dockerfile
------------ vhost.conf
-------- restful-api // test api folder which is lumen
------------ web.dockerfile
------------ app.dockerfile
------------ vhost.conf
-------- docker-compose.yml // now there's only 1 docker-compose file, and it's outside those 2 folders (and the project can be added something like backend)

Так как же теперь настроить файл docker с помощью version 3? Я уже пытался прочитать документацию, но я все еще не получил ее, и есть несколько примеров, которые отличаются друг от друга, поэтому я не уверен, какой из них мне следует использовать. (извините, я очень новичок в этом деле)

enter image description here

docker-compose.yml мой последний подход возвращает ошибку ERROR: Service "web" uses an undefined network "frontend"

version: '3'

services:  
  web:
    build:
      context: ./
      dockerfile: frontend/web.dockerfile
    volumes:
      - ./:/var/www
    ports:
      - "8080:80"
    networks:
      - frontend
      - api

  frontend:
    build:
      context: ./
      dockerfile: frontend/app.dockerfile
    volumes:
      - ./:/var/www
    networks:
      - database
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

  api:
    build:
      context: ./
      dockerfile: restful-api/app.dockerfile
    volumes:
      - ./:/var/www
    networks:
      - database
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

  database:
    image: mysql:5.6
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: dockerApp
    ports:
        - "33061:3306"

  cache:
    image: redis:3.0
    ports: 
      - "63791:6379"

Я только что добавил networks to my docker-compose.yml, но вместо этого получаю эту ошибку

ОШИБКА: файл Compose '. \ Docker-compose.yml' недопустим, потому что: Неподдерживаемый параметр конфигурации для services.networks: 'frontend'

networks:
    frontend: 
      driver: asisten-pajak-frontend
    api:
      driver: asisten-pajak-api

1 Ответ

1 голос
/ 20 марта 2019

Наконец-то я нашел ответ через несколько дней, пытаясь понять докер, и в конце я получил ответ: Laradock , и вы можете следовать этой документации Laradock для несколькихпроекты / контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...