【问题标题】:How to setup dev environment on a single host, simulating two disctinct servers如何在单个主机上设置开发环境,模拟两个不同的服务器
【发布时间】:2019-12-19 23:37:40
【问题描述】:

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

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

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

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

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

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

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

谢谢!

【问题讨论】:

  • 您可以在本地系统上的两个 (Linux) VM 上运行它,然后在每个 VM 上运行 Docker 和堆栈的其余部分。从拓扑上讲,这与您要部署的内容非常相似。我不会尝试在那种环境中进行实时开发,但它对于测试部署设置等非常有用。

标签: docker nginx networking docker-compose


【解决方案1】:

让我从一个建议开始:不要在你的开发环境中使用真正的生产主机名。所有依赖于环境的配置都应该由环境变量提供给你的应用程序。因此,您的应用程序应该访问在例如定义的主机。 $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 中提取并由环境变量配置。

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 2015-02-07
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多