分为两种情况:
1.容器间无关联
这种情况,可以采用除nginx端口外容器应用端口全部都指向nginx所指向的宿主机端口,然后由nginx统一进行映射。

2.容器间为集群模式
这种情况,可以指定集群某个节点为主节点,然后其他全部节点在容器内映射各自的端口,但是记得映射宿主机端口的时候,统一映射到一个端口上,然后nginx负载均衡到集群的各个节点的各个容器的端口。

例如:es集群
容器1:es01
容器2:es02
容器3:es03
容器4:nginx(用来做负载均衡)
es镜像映射宿主机需要:
es01 8080:8080
es02 8081:8080
es03 8082:8080

然后nginx指定监听端口(例如8800),对域名进行转发,前端访问localhost:8800,如可随机访问es集群节点即配置成功(默认轮询方式,可自行配置)。
具体nginx的配置,放到http里面:

upstream 域名 {
	server 容器ip:8080;
	server 容器ip:8081;
	server 容器ip:8082;
}
server {
	listen 8800;
	server_name nginx-proxy;
	location / {
		proxy_pass 域名
	}
}

附1:

具体验证过程(包含安装es):

1)拉取es镜像

查看es有哪些镜像,一般选择stars数最多的:

docker search elasticsearch

linux docker 负载均衡 docker负载均衡策略_配置文件


查看es的版本:

curl https://registry.hub.docker.com/v1/repositories/elasticsearch/tags| tr -d ‘[[]" ]’ | tr ‘}’ ‘\n’| awk -F: -v image=‘elasticsearch’ ‘{if(NR!=NF && $3 != “”){printf(“%s:%s\n”,image,$3)}}’

linux docker 负载均衡 docker负载均衡策略_配置文件_02

选择合适的版本拉取,一般来说es集群选择7.0以上的,7.0以下版本集群配置比较难找:

docker pull elasticsearch:7.0.0

linux docker 负载均衡 docker负载均衡策略_linux docker 负载均衡_03

编写配置文件(通过容器编排启动,需安装docker-compose,一般单机部署集群使用):vi docker-compose.yml

这里需要注意的是,启动集群如果不需要负载均衡,那么只需要暴露一个端口即可。如果nginx作为负载均衡,就需要在容器内部暴露不同端口,且映射到宿主机同一端口,然后nginx监听这个端口,根据端口将请求转发到不同的es节点。

在docker中,配置文件一般都通过挂载的方式挂载到容器中,需要将我们自己的nginx的配置文件通过挂载的方式替换掉nginx容器实例内部的配置文件,也就是指nginx.config。

运行启动命令:docker-compose up -d
-d指的是以后台方式运行,如果需要观察启动日志,可以去掉。验证是否启动成功也很简单,直接localhost加端口号访问nginx即可跳转到对应es节点,多次访问会跳转到不同的节点即部署成功。

附2:
安装docker
curl -sSL https://get.daocloud.io/docker | sh
安装docker-compose
curl -L “https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-linux docker 负载均衡 docker负载均衡策略_nginx_04(uname -m)” -o /usr/local/bin/docker-compose
添加执行权限:chmod +x /usr/local/bin/docker-compose
需要把docker-compose设置为全局环境变量,可通过软链接的方式:ln -sf /usr/local/bin/docker-compose /usr/bin