Как разместить несколько сред для проекта с использованием докера на одном компьютере? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть типичный веб-стек, состоящий из nginx + django + database компонентов.

Я установил их в разных док-контейнерах с docker-compose, и он работает нормально.

services:
  billing_app_dev:
    image: jameslin/billing_app:latest
    expose:
      - 8000
  billing_postgres:
    image: postgres:10.5
    restart: always
    volumes:
      - pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  billing_nginx:
    image: jameslin/billing_nginx:${TAG}
    volumes:
      - app_files:/static
    links:
      - 'billing_app'
    ports:
      - 80:80

Теперь мне интересно, как я могу настроить среды DEV и QA на одной машине. Я могу изменить контейнеры django и database для прослушивания разных портов, но похоже, что я не могу запускать контейнеры nginx по отдельности, поскольку порт 80 может прослушиваться только одним контейнером.

Мне придется поделиться контейнером nginx для тех двух сред, которые кажутся не очень чистыми.

Есть ли лучшие идеи, если запуск 2 виртуальных машин невозможен?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Я думаю, что вам нужно было virtual ip или, может быть, называется ip aliasing. Даже если у вас есть только одна сетевая карта, вы можете установить на нее 2 ips.

Затем вы можете установить 2 разных контейнера nginx на хосте и использовать разные ip, но один и тот же порт 80.

Примерно так:

cd /etc/sysconfig/network-script/
cp ifcfg-eth0 ifcfg-eth0:1
vi ifcfg-eth0:1

# Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=eth0:1 ----> sub network card
HWADDR=00:0C:29:45:62:3B
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.109.108 ----> configure a new different ip
NETMASK=255.255.255.0

Подробная информация относится к Создание нескольких IP-адресов для одного сетевого интерфейса

Для nginx, из руководство nginx , вам пришлось изменить свой докер nginx, чтобы изменить listen 80 на listen your_ip:80, тогда он не будет прослушивать все IP-адреса.

0 голосов
/ 02 ноября 2018

У меня есть 3 контейнера Apache и 1 nginx, работающие на одном сервере, так что я уверен, что это не проблема.

Для каждого стека базы данных веб-сервера + у меня есть свой файл docker-compose, таким образом, docker создаст отдельную сеть для каждого стека, избегая возможных проблем с одновременным портом, и вам нужно будет только связать свой nginx с разными порты вашего сервера, потому что вы можете привязать только один сервис к одному порту. тем не менее, каждый контейнер представляет собой отдельную «машину», поэтому даже в одной сети они могут использовать один и тот же порт.

если вам действительно нужно запустить все ваши службы в портах 80 и 443 вашего сервера, возможно, вам понадобится установить nginx, работающий в этих портах, как обратный прокси-сервер, вызывающий эти сервисы во внутренней сети докеров, - вариант но я никогда не пробовал это раньше по внутренней сети докера.

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