我有一个应用程序,例如一个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/

10-10 18:20
查看更多