使用Ambassador容器构建docker容器集群
当两个Docker容器在同一主机(或虚拟机)时,可以通过 --link 命令让两者直接互相访问。如果要跨主机实现容器互联,则往往需要容器知道物理主机的ip地址。利用Ambassador 容器机制,可以让互联的容器无需知道所在物理主机的IP地址即可互联。
基本场景
Ambassador 容器也是一种 docker 容器,她在内部提供了转发服务。
如下图。当客户端容器要访问服务器时,直接访问客户端 Ambassador 容器;这个请求会被客户端Ambassador 转发出去,到达服务端主机。服务端Ambassador 容器监听在对应的端口上,收到请求后再转发请求给服务端容器。
使用 Ambassador 容器
首先在服务端主机上创建一个服务端 redis-server:
$ sudo docker run -d --name redis-server crosbymichael/redis
创建一个服务端Ambassador 容器 redis_ambassador ,连接到服务端容器 redis-server,并监听本地的6379端口:
$ sudo docker run -d --link redis-server:redis --name redis_ambassador -p 6379:6379 svendowideit/ambassador
在客户端主机上创建客户端Ambassador容器, 为其设置服务端物理主机的监听地址是tcp://x.x.x.x:6379,将本地收集到6379端口的流量转发到服务端物理主机:
$ sudo docker run -d --name redis_ambassador --expose 6379 -e REDIS_PORT_6379_TCP=tcp://x.x.x.x:6379 svendowideit/ambassador
最后,创建一个哭护短容器,进行测试,默认访问6379端口实际上是访问的服务端容器内的 Redis应用:
$ sudo docker run -it --rm --link redis_ambassador:redis relateiq/redis-cli
Ambassador 镜像的Dockerfile
Ambassador 镜像的Dockerfile如下所示:
FROM docker-ut
MAINTAINER SvenDowideit@home.org.qu
CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' | sh && top
主要是一行正则表达式,从环境变量中找到包含“TCP”字符串的变量,然后使用正则表达式‘.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)’从中提取ip和端口号,最后利用socat 将流量转发到指定的地址上。
这种情况下,需要额外的Ambassador 容器,并且也仍然需要知道目标容器所在的物理主机的地址。
博客:https://blog.csdn.net/sunset108/article/details/40856957 也有相关说明。
使用Ambassador容器构建docker容器集群相关推荐
- 快速获取容器VIPs,解决集群自动化测试难题
出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一.三.五晚6点10分 与您不见不散 说在前面 要想使用容器集群来启动自动化测试,那么我们就必须要了解容器的 VIPs .我一直在 ...
- api k8s restful 创建pods_Kind:一个容器创建K8S开发集群
什么是 Kind kind:是一种使用Docker容器节点运行本地Kubernetes集群的工具.该类型主要用于测试Kubernetes,但可用于本地开发或CI. 注意:kind仍在开发中 部署 Ma ...
- 【实战演练】快速获取容器VIPs,解决集群自动化测试难题
项目背景介绍 要想使用容器集群来启动自动化测试,那么我们就必须要了解容器的 VIPs .文章作者 Marcos Tenrero 一直在尝试使用 Docker 内部的服务发现功能来识别在 Docker ...
- K8S(一)VMware Fusion 构建基本k8s集群
文章目录 背景 准备 网络配置 系统初始化 kubeadm部署k8s集群 harbor私有镜像仓库构建(optional) 功能验证 harbor 私有镜像仓库功能验证 k8s集群功能验证 背景 参考 ...
- Jenkins持续集成结合Docker Swarm集群实现Web应用部署的发布
案列环境: 准备5台虚拟机,其中3台用于部署Docker Swarm集群,1台部署代码版本控制系统,1台部署Jenkins持续集成工具. 192.168.80.10 swarm01 192.168.8 ...
- 【云原生】第十篇--Docker主机集群化方案 Docker Swarm
Docker主机集群化方案 Docker Swarm 一.docker swarm介绍 二.docker swarm概念与架构 2.1 架构 2.2 概念 三.docker swarm集群部署 3.1 ...
- docker swarm 集群服务编排部署指南(docker stack)
Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络.D ...
- 基于iptables的SNAT+DNAT+docker服务器集群搭建
什么是SNAT? SNAT用于局域网访问互联网,局域网的主机A想访问互联网上的主机C,首先要将数据包发送到防火墙所在的主机B,B收到后修改数据包的源地址为B机的公网IP,然后再发送到互联网. C机收到 ...
- 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...
Docker Swarm 集群搭建 现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab.Aliyun镜像服务.Docker Swarm 轻松搭建自己的 Docker集群 ...
最新文章
- windows git安装到把项目推送到github
- div+css如何让一行内的文字两端对齐?
- 安装gcc 4.8.2 for cxx 11
- Swift 学习手记1,pod 的 类库使用
- HDU Today--hdu2112
- 微信小程序 解决disableScroll无法禁止小程序下拉的问题和视频铺满全屏尺寸
- c语言通讯录感想,C语言通讯录实例分享
- WinCC界面中通过插件打开pdf文件
- 如何对极乐迪斯科(Disco Elysium for mac)进行安装
- OSError: [WinError -529697949] Windows Error 0xe06d7363
- php webshell探索-常见小马
- 72 个网络应用安全实操要点,全方位保护你的 Web 应用
- 问题记录-笔记本HDMI外接2k显示器如何调2k分辨率
- 2018年终个人总结
- 值传递,还是引用传递(实践是检验真理的唯一标准)
- Unity3d C# 使用Universal Media Player(ump)插件播放视频的众坑之无法播放视频和VLC播放器依赖的问题
- git:patch does not apply
- 神兵利器推荐——你一定不能错过的chrome插件
- 如何在 Windows 上安装 ONLYOFFICE 文档 v7.3
- windows的IOCP(Input Output Completion Port,输入输出完成端口)
热门文章
- C++ 鼠标点击的获取
- 性能监视器(Performance Monitor)指标说明
- 招商银行青岛分行金融科技岗招录
- Tcl数组命令之array
- 基于 Redis + Lua 脚本实现分布式锁,确保操作的原子性
- 42幅非常有创意的食品广告欣赏(上篇)
- 利用人性做生意,女装店做营销:有钱人可以免费穿?颠覆式营销!
- 2023njupt-南邮的《工程与社会》课程[ppt+论文(水文)]
- 系统日志监控(PLG)
- 阿里、字节面试必撸,阿里大能总结 410 页 Java 并发编程手册全彩版,附录高并发面试真题及答案详解