docker - 如何在单个主机上设置开发环境,模拟两个不同的服务器
问题描述
我的宠物项目包括两台服务器。每个都有自己的 docker-compose 环境,前端有 nginx,后面有不同的图像/服务。
这些服务器位于同一个域中,例如 main.example.com 和 subdomain.example.com。
目标是在我的开发机器上运行这两个实例,以简化调试、测试等......
我知道同一端口(此处为 80/443)只能在主机内分配一次,因此我的两台服务器(或更多!)不能轻易同时出现。
但是有没有办法接近这个?我的一个限制是我想尽可能多地使用真实域名,避免硬编码 IP 等......知道我想到的一个练习是在 main.example.com 服务器中实现 DNS 服务器对于子域。因此,坚持尽可能接近现实的设置很重要。
我曾想过在 docker 中运行 docker,将所有这些包装到另一层网络中,模拟通过 WAN,但显然这是一堆蠕虫,我不确定这会给我想要的东西网络级别。
有针对这个的解决方法吗?或者我最好使用至少两个物理主机(意味着不能轻松地在移动中工作等......)?
谢谢!
解决方案
让我从一个建议开始:不要在你的开发环境中使用真正的生产主机名。所有与环境相关的配置都应通过环境变量提供给您的应用程序。因此,您的应用程序应该访问在 $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 中提取并由环境变量配置。
推荐阅读
- javascript - node-pre-gyp install --fallback-to-build
- intellij-idea - IntelliJ IDEA 多种终端
- java - 使用 Ant 打印 Java 的包层次结构
- internet-explorer-11 - 仅在 IE 中:表单内的组合树不起作用
- java - 在tablayout之间切换时如何修复google登录选项功能重复和崩溃
- elasticsearch - Elasticsearch 启动错误:主要错误无法找到附加程序
- python - 可以在 3.7 及更高版本中将 typing.Mapping 等与 functools.singledispatch 一起使用吗?
- wordpress - Azure WordPress 站点离线但需要数据
- powerbi - Power BI - 运行包含许多筛选器的总列
- c# - Xamarin.Forms 中的 Device.StartTimer 与 System.Threading.Timer