簡體   English   中英

在單個 Linux Webserver 服務器上運行多個 Docker 容器

[英]Running Multiple Docker Containers on a Single Linux Webserver Server

您好,我目前正在規划一些帶有 Docker 的服務器架構。 (我對 Docker 還很陌生)

我的目標是:

  1. 在單個 ubuntu 機器上運行多個 docker 容器。
  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 docker 鏡像,后端使用 NODE:10 docker 鏡像。

我想要完成的

在我的服務器上,我將有另一個 NGINX 實例。 我想以某種方式將每個 docker-compose 設置容器化到一個端口,例如 localhost:5000。

這樣,當我收到來自 www.example-website1.com 的請求時,它會重定向到 localhost:5000,然后從 docker-compose 設置加載 localhost:8080。

當我再次收到來自 www.example-website2.com 的請求時,它會重定向到 localhost:5001,然后從另一個 docker-compose 設置加載 localhost:8080。

這可能嗎? 還是有另一種方法我應該解決這個問題?

您不能在兩個不同的容器中使用相同的端口,您總是必須公開不同的端口。

要配置 ngnix,您必須將其安裝在主機上,然后將 go 安裝到文件夾:

/etc/ngnix/sites-enabled 

然后使用 ngnix 將使用的規范創建一個 .conf 文件。 例子:

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 的容器。 我希望我幫助了你

在您的示例中,端口 8080 沒有什么特別之處,您可以直接選擇要用於單獨的基於 Compose 的應用程序的主機端口。 您必須為每個 Compose 設置選擇不同的已發布端口,否則容器將根本無法啟動。

如果您的設置是主機 nginx 聯系“前端”容器,然后將一些請求轉發到“后端”容器,那么您只需為前端選擇所需的端口號,您不需要暴露后端。

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 組合服務名和容器的端口: http://frontend:80/ 您不需要expose:ports:就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM