Как получить docker контейнеров из разных проектов, говорящих друг с другом - PullRequest
0 голосов
/ 26 февраля 2020

Я разработал и докеризировал два приложения web (реагировать) и api (laravel, mysql), у них есть отдельные кодовые базы и отдельные каталоги.

Может кто-нибудь помочь объяснить, как я могу получить мой веб-приложение взаимодействует с моим API, в то же время используя docker

Обновление: В конечном итоге я хочу, чтобы и мой интерфейс, и сервер работали на порту 80 без необходимости два веб-сервера работают в качестве контейнеров, поэтому моя среда разработки docker будет работать так же, как и valet или mamp et c.

1 Ответ

1 голос
/ 26 февраля 2020

Для разработки вы можете использовать docker -compose .

Ключевые преимущества:

  • Настройка служб вашего приложения в YAML.
  • Отдельная команда для создания / запуска служб, определенных в этой конфигурации.
  • Compose создает сеть по умолчанию для вашего приложения. Каждый контейнер присоединяется к этой сети по умолчанию, и они могут видеть друг друга.

Я использую следующую структуру для проекта.

projectFolder
  |_backend (laravel app)
  |_frontend (react app)
  |_docker-compose.yml
  |_backend.dockerfile
  |_frontend.dockerfile

My docker -compose.yml

version: "3.3"
  services:
    frontend:
      build:
        context: ./
        dockerfile: frontend.dockerfile
        args:
          - NODE_ENV=development
      ports:
        - "3000:3000"
      volumes:
        - ./frontend:/opt/app
        - ./frontend/package.json:/opt/package.json
      environment:
        - NODE_ENV=development
    backend:
      build:
        context: ./
        dockerfile: backend.dockerfile
      working_dir: /var/www/html/actas
      volumes:
        - ./backend:/var/www/html/actas
      environment:
        - "DB_PORT=3306"
        - "DB_HOST=mysql"
      ports:
        - "8000:8000"
    mysql:
      image: mysql:5.6
      ports:
        - "3306:3306"
      volumes:
        - dbdata:/var/lib/mysql
      environment:
        - "MYSQL_DATABASE=homestead"
        - "MYSQL_USER=homestead"
        - "MYSQL_PASSWORD=secret"
        - "MYSQL_ROOT_PASSWORD=secret"

  volumes:
    dbdata:

Каждая часть приложения определяется службой в файле docker -compose. Например,

  • веб-интерфейс
  • бэкэнд
  • mysql

Docker -compose создаст сеть по умолчанию и добавит каждый контейнер к этому. Именем хоста для каждого контейнера будет имя службы, определенное в файле yml.

Например, внутренний контейнер обращается к серверу mysql с именем mysql. Это можно увидеть в самом определении сервиса:

backend:
...
  environment:
  - "DB_PORT=3306"
  - "DB_HOST=mysql" <-- The hostname for the mysql container is the name of the service

С помощью этого в приложении реакции я могу настроить конфигурацию прокси в пакете. json следующим образом

"proxy": "http://backend:8000",

И последнее, о чем упоминал Дэвид Мэйз в комментариях. Добавьте backend в файл hosts, чтобы браузер мог разрешить это имя.

Например, / etc / hosts в ubuntu

127.0.1.1       backend
...