【问题标题】:One App -> Run Multiple Docker Instances on Single Ec2一个应用程序 -> 在单个 Ec2 上运行多个 Docker 实例
【发布时间】:2017-08-02 20:41:54
【问题描述】:
我有一个应用程序,比如一个 api,在 ec2 上作为 docker 容器运行。
由于此容器依赖于 ec2 主机(端口映射),我无法在同一台机器上运行多个实例。
我想达到这样一种状态,即我有 5 个主机,它们前面有一个 elb,我应该能够在所有这些主机中运行超过 1 个容器实例。
我知道我可以使用 ECS 实现这种状态。
我可以用 Ec2 、ELB 和 Docker 做到这一点吗?
-谢谢
【问题讨论】:
标签:
amazon-web-services
docker
amazon-ec2
【解决方案1】:
有多种方法可以做到这一点
为每个 docker 容器使用不同的端口
docker run -d -p 81:80 yourimage
docker run -d -p 82:80 yourimage
docker run -d -p 83:80 yourimage
docker run -d -p 84:80 yourimage
docker run -d -p 85:80 yourimage
然后您可以在端口 80 上放置一个 nginx 负载均衡器。更多详细信息请参阅http://nginx.org/en/docs/http/load_balancing.html
您需要使用如下配置
http {
upstream myapp1 {
server 127.0.0.1:81;
server 127.0.0.1:82;
server 127.0.0.1:83;
server 127.0.0.1:84;
server 127.0.0.1:85;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
使用单节点 docker swarm manager
您可以使用以下命令设置单节点 docker swarm
docker swarm init
然后在那台机器上运行以下命令
docker service create --name=myapp --replicase=5 -p 80:80 yourimage
这将创建 5 个负载均衡容器并将它们发布到端口 80。
在这两种情况下都不需要 ELB。而且我怀疑 ELB 是否适用于同一主机 + 多端口场景