Запуск нескольких Docker-контейнеров на одном сервере веб-сервера Linux - PullRequest
0 голосов
/ 22 сентября 2019

Здравствуйте. В настоящее время я планирую некоторую серверную архитектуру с помощью Docker.(Я довольно новичок в Docker)

Мои цели:

  1. Чтобы на одном компьютере с Ubuntu работало несколько докеров.
  2. Каждый контейнер используетодинаковые порты для каждого процесса: (например, localhost: 8080 для внешнего интерфейса, localhost: 3000 для внутреннего интерфейса.

Как работает каждый контейнер:

Прямо сейчас яЯ использую docker compose для запуска как внешнего, так и внутреннего интерфейса.

docker-compose.yml

version: '3'
services:
  frontend:
    build: ./frontend
    ports:
      - 8080:80
    networks:
      - app-network
  backend:
    build: ./backend
    ports:
      - 3000:3000
    working_dir: /usr/src/server
    command: node server.bundle.js
    networks:
      - app-network
networks:
  app-network:
    driver: bridge

Это прекрасно работает.Я могу посетить localhost: 8080 для веб-страницы и localhost: 3000 для бэкэнда.

Примечание: Внешний контейнер использует образ докера NGINX, а бэкэнд использует NODE: 10 образ докера.

Чего я хочу достичь

На моем сервере у меня будет еще один экземпляр NGINX.Я хотел бы как-то контейнировать каждую настройку docker-compose под одним портом, например localhost: 5000.

Таким образом, когда я получаю запрос от www.example-website1.com, он перенаправляет на localhost: 5000, который затем загружаетlocalhost: 8080 из этой настройки docker-compose.

Опять же, когда я получаю запрос от www.example-website2.com, он перенаправляет на localhost: 5001, который затем загружает localhost: 8080 из другой настройки docker-compose.

Возможно ли это?Или есть другой способ, которым я должен подходить к этой проблеме?

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

В вашем примере нет ничего особенного с портом 8080, и вы можете просто напрямую выбрать порт хоста, который вы хотите использовать для отдельных приложений на основе Compose.Вы должны выбрать разные опубликованные порты для каждой установки Compose, иначе контейнеры не смогут запускаться вообще.

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

version: '3'
services:
  frontend:
    build: ./frontend
    ports:
      # Pick a different port "5000" for each setup
      - 5000:80
  backend:
    build: ./backend
    # Use default command:, working_dir: from image
    # Could publish ports: if necessary
    depends_on:
      - frontend
# Use "default" Docker network

Если вам нужно напрямуюсвязавшись с бэкендом извне, вы можете таким же образом выставить его через прокси хоста nginx и опубликовать с него ports:, снова выбирая отдельные порты для каждого стека контейнеров.

Между двумя контейнерами, если backend необходимо вызвать frontend, он всегда может использовать имя службы Docker Compose и порт внутри контейнера: http://frontend:80/.Вам не нужно expose: или ports:, чтобы это работало.

1 голос
/ 22 сентября 2019

Вы не можете использовать один и тот же порт в двух разных контейнерах, вам всегда нужно предоставлять другой порт.

Чтобы настроить ngnix, вы должны установить его на свой хост, а затем перейти в папку:

/etc/ngnix/sites-enabled 

Затем создайте файл .conf со спецификациями, которые будет использовать ngnix.Пример:

myapi.conf

server {
  server_name mywebsite.com;
  access_log  /etc/nginx/mywebsite.log;

  location / {
      proxy_pass http://127.0.0.1:9003;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

В этом примере весь трафик, который поступает через сайт mywebsite.com, будет направлен в контейнер с открытым портом 9003.Я надеюсь, что помог вам

...