我有一个应用程序,例如一个api,在ec2上作为docker容器运行。
由于此容器依赖于ec2主机(端口映射),因此我无法在同一台计算机上运行多个实例。
我想达到一种状态,即我有5台主机,这些主机前面有一个弯头,并且我应该能够在所有这些主机中运行多个容器实例。
我知道我可以使用ECS达到此状态。
我可以用Ec2,ELB和Docker做到这一点吗?
-谢谢
最佳答案
有多种方法可以做到这一点
为每个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群管理器
您可以使用以下命令设置单节点docker swarm
docker swarm init
然后在那台机器上运行以下命令
docker service create --name=myapp --replicase=5 -p 80:80 yourimage
这将创建5个负载平衡的容器并将其发布在端口80上。
在两种情况下都不需要ELB。我怀疑ELB是否可以在同一主机+多端口的情况下工作
关于amazon-web-services - 一个应用程序->在单个Ec2上运行多个Docker实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45448748/