当两个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容器集群相关推荐

  1. 快速获取容器VIPs,解决集群自动化测试难题

    出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一.三.五晚6点10分  与您不见不散 说在前面 要想使用容器集群来启动自动化测试,那么我们就必须要了解容器的 VIPs .我一直在 ...

  2. api k8s restful 创建pods_Kind:一个容器创建K8S开发集群

    什么是 Kind kind:是一种使用Docker容器节点运行本地Kubernetes集群的工具.该类型主要用于测试Kubernetes,但可用于本地开发或CI. 注意:kind仍在开发中 部署 Ma ...

  3. 【实战演练】快速获取容器VIPs,解决集群自动化测试难题

    项目背景介绍 要想使用容器集群来启动自动化测试,那么我们就必须要了解容器的 VIPs .文章作者 Marcos Tenrero 一直在尝试使用 Docker 内部的服务发现功能来识别在 Docker ...

  4. K8S(一)VMware Fusion 构建基本k8s集群

    文章目录 背景 准备 网络配置 系统初始化 kubeadm部署k8s集群 harbor私有镜像仓库构建(optional) 功能验证 harbor 私有镜像仓库功能验证 k8s集群功能验证 背景 参考 ...

  5. Jenkins持续集成结合Docker Swarm集群实现Web应用部署的发布

    案列环境: 准备5台虚拟机,其中3台用于部署Docker Swarm集群,1台部署代码版本控制系统,1台部署Jenkins持续集成工具. 192.168.80.10 swarm01 192.168.8 ...

  6. 【云原生】第十篇--Docker主机集群化方案 Docker Swarm

    Docker主机集群化方案 Docker Swarm 一.docker swarm介绍 二.docker swarm概念与架构 2.1 架构 2.2 概念 三.docker swarm集群部署 3.1 ...

  7. docker swarm 集群服务编排部署指南(docker stack)

    Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络.D ...

  8. 基于iptables的SNAT+DNAT+docker服务器集群搭建

    什么是SNAT? SNAT用于局域网访问互联网,局域网的主机A想访问互联网上的主机C,首先要将数据包发送到防火墙所在的主机B,B收到后修改数据包的源地址为B机的公网IP,然后再发送到互联网. C机收到 ...

  9. 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...

    Docker Swarm 集群搭建 现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab.Aliyun镜像服务.Docker Swarm 轻松搭建自己的 Docker集群 ...

最新文章

  1. windows git安装到把项目推送到github
  2. div+css如何让一行内的文字两端对齐?
  3. 安装gcc 4.8.2 for cxx 11
  4. Swift 学习手记1,pod 的 类库使用
  5. HDU Today--hdu2112
  6. 微信小程序 解决disableScroll无法禁止小程序下拉的问题和视频铺满全屏尺寸
  7. c语言通讯录感想,C语言通讯录实例分享
  8. WinCC界面中通过插件打开pdf文件
  9. 如何对极乐迪斯科(Disco Elysium for mac)进行安装
  10. OSError: [WinError -529697949] Windows Error 0xe06d7363
  11. php webshell探索-常见小马
  12. 72 个网络应用安全实操要点,全方位保护你的 Web 应用
  13. 问题记录-笔记本HDMI外接2k显示器如何调2k分辨率
  14. 2018年终个人总结
  15. 值传递,还是引用传递(实践是检验真理的唯一标准)
  16. Unity3d C# 使用Universal Media Player(ump)插件播放视频的众坑之无法播放视频和VLC播放器依赖的问题
  17. git:patch does not apply
  18. 神兵利器推荐——你一定不能错过的chrome插件
  19. 如何在 Windows 上安装 ONLYOFFICE 文档 v7.3
  20. windows的IOCP(Input Output Completion Port,输入输出完成端口)

热门文章

  1. C++ 鼠标点击的获取
  2. 性能监视器(Performance Monitor)指标说明
  3. 招商银行青岛分行金融科技岗招录
  4. Tcl数组命令之array
  5. 基于 Redis + Lua 脚本实现分布式锁,确保操作的原子性
  6. 42幅非常有创意的食品广告欣赏(上篇)
  7. 利用人性做生意,女装店做营销:有钱人可以免费穿?颠覆式营销!
  8. 2023njupt-南邮的《工程与社会》课程[ppt+论文(水文)]
  9. 系统日志监控(PLG)
  10. 阿里、字节面试必撸,阿里大能总结 410 页 Java 并发编程手册全彩版,附录高并发面试真题及答案详解