首页 > 解决方案 > 如何在单个主机上设置开发环境,模拟两个不同的服务器

问题描述

我的宠物项目包括两台服务器。每个都有自己的 docker-compose 环境,前端有 nginx,后面有不同的图像/服务。

这些服务器位于同一个域中,例如 main.example.com 和 subdomain.example.com。

目标是在我的开发机器上运行这两个实例,以简化调试、测试等......

我知道同一端口(此处为 80/443)只能在主机内分配一次,因此我的两台服务器(或更多!)不能轻易同时出现。

但是有没有办法接近这个?我的一个限制是我想尽可能多地使用真实域名,避免硬编码 IP 等......知道我想到的一个练习是在 main.example.com 服务器中实现 DNS 服务器对于子域。因此,坚持尽可能接近现实的设置很重要。

我曾想过在 docker 中运行 docker,将所有这些包装到另一层网络中,模拟通过 WAN,但显然这是一堆蠕虫,我不确定这会给我想要的东西网络级别。

有针对这个的解决方法吗?或者我最好使用至少两个物理主机(意味着不能轻松地在移动中工作等......)?

谢谢!

标签: dockernginxnetworkingdocker-compose

解决方案


让我从一个建议开始:不要在你的开发环境中使用真正的生产主机名。所有与环境相关的配置都应通过环境变量提供给您的应用程序。因此,您的应用程序应该访问在 $OTHER_HOST 中定义的主机,无论它是 IP 地址还是主机名。

回到你的问题。您可以轻松地使用 Docker compose 来使用两个不同的容器来启动您的开发环境。一个简单的示例如下所示:

version: '3'

services:

  microservice:
    build: .
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=database
      - DB_PORT=5432
      - DB_NAME=demo
      - DB_USER=demo
      - DB_PASS=demo

  database:
    image: "postgres:alpine"
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=demo
      - POSTGRES_USER=demo
      - POSTGRES_PASSWORD=demo

此示例使用 Dockerfile 构建名为“微服务”的映像并为数据库设置环境变量。数据库的第二个映像刚刚从 Dockerhub 中提取并由环境变量配置。


推荐阅读