Halo, 今天我们来学习一下 interlock,interlock 用于 docker deamon 和 docker swarm 集群的服务发现。
我们的需求是什么? 当我的容器启动一个服务时,能被自动发现,前端的反向代理可以自动更改配置文件,添加和删除服务。
interlock 能做什么? 引用github 开发者的原话 :
“Dynamic, event-driven extension system using . Extensions include HAProxy and Nginx for dynamic load balancing.”
整理下今天我们的需求 :
(1) 启动容器,提供一个服务,前端代理的nginx自动更新配置文件
(2) 更新interlock nginx 配置模板,添加 gzip相关配置,默认模板内 gzip 配置是未开启的
(3) 测试是否可以提供服务,关闭一个容器,前端代理配置文件是否更新,服务自动缩减
step 1 拉取一个稳定的 interlock 容器
docker pull ehazlett/interlock:master
docker pull nginx
setp 2 编写一个interlock 配置文件
[root@VM_1_11_centos nginx]# cat config.toml
ListenAddr = ":8080"
DockerURL = "unix:///var/run/docker.sock" // 如果是swarm 集群集群,就是监听swarm manager:4000端口
[[Extensions]]
Name = "nginx"
ConfigPath = "/etc/nginx/nginx.conf"
PidPath = "/var/run/nginx.pid"
TemplatePath = "/etc/interlock/nginx.conf.template"
BackendOverrideAddress = "172.17.0.1" // 如果是 swarm 集群,此设置可以不写
MaxConn = 1024
Port = 80
NginxPlusEnabled = false
生成一个模板文件,添加gzip 配置,默认的interlock未开启gzip 配置
#gzip on;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/json ;
gzip_vary on;
step 3 启动 interlock,nginx 容器
docker run -P -d -ti --name interlock \
-v /tmp/interlock/config.toml:/etc/interlock/config.toml \
-v /tmp/interlock/template/nginx.conf.template:/etc/interlock/nginx.conf.template \
-v /var/run/docker.sock:/var/run/docker.sock \ // 如果是 swarm 集群本地 sock 可以不挂载
ehazlett/interlock:master -D run -c /etc/interlock/config.toml
docker run -d -p 80:80 --label interlock.ext.name=nginx \
--link interlock --name inter_nginx nginx
启动一个测试nginx服务
docker run -d -p 80 --hostname=MM --label interlock.domain=XXOO.com nginx
step 4 查看 interlock 日志
docker logs -f interlock
INFO[0918] MM.XXOO.com: upstream=172.17.0.1:32818 ext=nginx
DEBU[0918] proxy config path: /etc/nginx/nginx.conf ext=lb
DEBU[0918] detected proxy container: id=2883c33c0312021bb25c433f03ba740e4e9be880193c3439a394c3a7da2cb325 backend=nginx ext=lb
DEBU[0918] proxyContainers: [{2883c33c0312021bb25c433f03ba740e4e9be880193c3439a394c3a7da2cb325 [/nginx_inter] nginx nginx -g 'daemon off;' 1467106027 Up 6 minutes [{ 443 0 tcp} {0.0.0.0 80 80 tcp}] 0 0 map[interlock.ext.name:nginx] {map[bridge:{ [] [] 16b182096f7a0e2c5070e9576ba90fa7b40b7f51267b43e8c32044be20c6bcdb 172.17.0.1 172.17.0.3 16 0 02:42:ac:11:00:03}]}}] ext=lb
DEBU[0918] saving proxy config
查看方向代理nginx 配置文件,是否有 gzip 配置,以及 MM.XXOO.com upstream 配置
[root@VM_1_11_centos ~]# docker exec -ti nginx_inter cat /etc/nginx/nginx.conf| grep -A2 -E "(gzip|XXOO)"
#gzip on;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/json ;
gzip_vary on;
proxy_connect_timeout 600;
--
upstream MM.XXOO.com {
zone MM.XXOO.com_backend 64k;
server 172.17.0.1:32818;
--
server_name MM.XXOO.com;
location / {
proxy_pass
}
进入测试服务的 nginx 创建一个测试的 test.js 文件,更改hosts,测试结果
目的达到, 测试服务可以正常访问,Response Headers Content-Encoding: gzip, OK 家走~
Cail_wepiao
参考资料:
阅读(1838) | 评论(0) | 转发(0) |