docker集群部署
一、使用自定义网桥连接跨主机容器
要是Linux可以工作在网桥模式,必须安装网桥工具bridge-utils,运行命令:# yum install bridge-utils
查看桥连状态:# brctl show
1、brctl的使用
帮助:# brctl --help
addbr bridge的名称 #添加bridge;
delbr bridge的名称 #删除bridge;
addif bridge的名称device的名称 #添加接口到bridge;
delif bridge的名称device的名称 #从bridge中删除接口
setageing bridge的名称 时间 #设置老化时间,即生存周期
setbridgeprio bridge的名称 优先级 #设置bridge的优先级
setfd bridge的名称 时间 #设置bridge转发延迟时间
sethello bridge的名称 时间 #设置hello时间
setmaxage bridge的名称 时间 #设置消息的最大生命周期
setpathcost bridge的名称 端口 权重 #设置路径的权值
setportprio bridge的名称 端口 优先级 #设置端口的优先级
show #显示bridge列表
showmacs bridge的名称 #显示MAC地址
showstp bridge的名称 #显示bridge的stp信息
stp bridge的名称{on|off} #开/关stp
设置linux让网桥运行 配置网桥
创建一个虚拟的以太网桥接口:# brctl addbr br0
关闭stp协议:# brctl stp br0 off
添加两个(或更多)以太网物理接口:
# brctl addif br0 eth0
# brctl addif br0 eth1
现在他们成了逻辑网桥设备的一部分了,不再需要IP地址。下面我们将这些IP地址释放掉
# ifconfig eth0 down
# ifconfig eth1 down
# ifconfig eth0 0.0.0.0 up
# ifconfig eth1 0.0.0.0 up
最后,启用网桥 # ifconfig br0 up
我们给这个新的桥接口分配一个IP地址
# ifconfig br0 10.0.3.129
或者把最后这两步合成一步:
# ifconfig br0 10.0.3.129 up
关闭网桥命令
# brctl delif br0 eth1
# brctl delif br0 eth0
# ifconfig br0 down
# brctl delbr br0
2、建立网桥
宿主机网卡信息: name:ens33
IP:192.168.1.214
GATEWAY:192.168.1.1
DNS:114.114.114.114
(1)停止docker服务
# service docker stop
(2)删除docker0网卡
# ip link set dev docker0 down
# brctl delbr docker0
(3)新建桥接物理网络虚拟网卡br0
# brctl addbr br0
# ip link set dev br0 up
# ip addr add 192.168.1.215/24 dev br0 为br0分配物理网络中的ip地址
# ip addr del 192.168.1.214/24 dev ens33 将宿主机网卡的IP清空
# brctl addif br0 ens33 将宿主机网卡挂到br0上 (若xshell端操作会断开,需进入vmware虚拟机进行操作)
# ip route add default via 192.168.1.1 dev br0 为br0设置路由
(4)设置docker服务启动参数
# vim /etc/sysconfig/docker #在OPTIONS='--selinux-enabled'这行中修改为OPTIONS='--selinux-enabled -b=br0'
解决centos7里没有docker没有配置文件
# vim /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/docker
ExecStart=/usr/bin/docker -d $OPTIONS -H fd://
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
MountFlags=slave
[Install]
WantedBy=multi-user.target
# vim /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock'
DOCKER_CERT_PATH=/etc/docker
# If you want to add your own registry to be used for docker search and docker
# pull use the ADD_REGISTRY option to list a set of registries, each prepended
# with --add-registry flag. The first registry added will be the first registry
# searched.
# ADD_REGISTRY='--add-registry registry.access.redhat.com'
# If you want to block registries from being used, uncomment the BLOCK_REGISTRY
# option and give it a set of registries, each prepended with --block-registry
# flag. For example adding docker.io will stop users from downloading images
# from docker.io
# BLOCK_REGISTRY='--block-registry'
# If you have a registry secured with https but do not have proper certs
# distributed, you can tell docker to not look for full authorization by
# adding the registry to the INSECURE_REGISTRY line and uncommenting it.
INSECURE_REGISTRY='--insecure-registry dl.dockerpool.com:5000'
# On an SELinux system, if you remove the --selinux-enabled option, you
# also need to turn on the docker_transition_unconfined boolean.
# setsebool -P docker_transition_unconfined 1
# Location used for temporary files, such as those created by
# docker load and build operations. Default is /var/lib/docker/tmp
# Can be overriden by setting the following environment variable.
# DOCKER_TMPDIR=/var/tmp
# Controls the /etc/cron.daily/docker-logrotate cron job status.
# To disable, uncomment the line below.
# LOGROTATE=false
重启docker
# systemctl daemon-reload
# systemctl restart docker
(5)启动docker服务
# service docker start
(6)安装pipework
# yum install -y git
# git clone https://github.com/jpetazzo/pipework
# cp ~/pipework/pipework/usr/local/bin/
(7)启动一个手动设置网络的容器,这里最好不要让docker自动获取ip,下次启动会有变化而且自动获取的ip可能会和物理网段中的ip冲突
# docker run -d --net=none --name=test-net centos /bin/bash
(8)为weifeng容器设置一个与桥接物理网络同地址段的ip@网关
# pipework br0 test-net 192.168.1.125/24@192.168.1.1
(9)进入容器查看ip
# docker exec -it test-net /bin/bash
二、使用Ambassador容器
当两个Docker容器在同一主机时,可以通过--link命令让两者直接互相访问。如果要跨主机实现容器互联,则往往需要容器知道其他物理主机的IP地址。利用Ambassador容器机制,可以让互联的容器无需知道所在物理主机的IP地址即可互联。Ambassador容器也是一种Docker容器,它在内部提供了转发服务。当客户端容器要访问服务端容器的时候,直接访问客户端Ambassador容器;这个请求会被客户端Ambassador转发出去,到达服务端主机。服务端Ambassador容器监听在对应端口上,收到请求后再转发请求给服务端容器。

以redis镜像为例。
首先在服务端主机上创建一个服务端容器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 -i -t -rm -link redis_ambassador:redis relateiq/redis-cli
redis 172.17.0.160:6379> ping
PONG
Ambassador镜像的Dockerfile
Ambassador镜像的Dockerfile如下所示。其实现十分简单,主要是一行正则表达式,从环境变量中找到包含“TCP”字符串的变量,然后使用正则表达式`.*_PORT([0-9])_TCP=tcp:\/\/(.):(.*)`从中提取IP和端口号,最后利用socat(一个socket转发程序)将流量转发到指定的地址上:
FROM docker-ut
MAINTAINER SvenDowideit@home.org.au
CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1, fork, reuseaddr TCP4:\2:\3 \&/' | sh && top
这种情况下,需要额外的Ambassador容器,并且也仍然需要知道目标容器所在的物理主机的地址。
docker集群部署的更多相关文章
- 27.Docker集群部署
对于scrapy的部署方式 1.Scrapyd 安装扩展组件,远程控制scrapy任务,包括部署源代码,启动任务,监听任务.scrapy-client .scrapyd api 协助完成部署和监听操作 ...
- RocketMQ(2)---Docker集群部署RocketMQ
RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...
- Docker集群部署SpringCloud应用
整体架构 docker环境准备 # linux下的安装,自行百度 # windows docker toolbox下载地址 https://download.docker.com/win/stable ...
- Spring Eureka 本地Docker集群部署
故事背景 最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境.产线的所有服务都是基于K8s和Docker部署 ...
- Clickhouse Docker集群部署
写在前面 抽空来更新一下大数据的玩意儿了,起初架构选型的时候有考虑Hadoop那一套做数仓,但是Hadoop要求的服务器数量有点高,集群至少6台或以上,所以选择了Clickhouse(后面简称CH). ...
- Kubernetes&Docker集群部署
集群环境搭建 搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单 ...
- Nacos Docker集群部署
参考文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 1.从git上下载nacos-docker项目,本地目录为/docksoft/naco ...
- 使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
随机推荐
- Android 开发工具类 31_WebService 获取手机号码归属地
AndroidInteractWithWebService.xml <?xml version="1.0" encoding="utf-8"?> & ...
- springboot-25-springboot 集成 ActiveMq
消息的发布有2种形式, 队列式(点对点) 和主题式(pub/sub) 模式, 队列式发布后, 接收者从队列中获取消息后, 消息就会消失, 但任意消费者都可以从队列中接受消息, 消息只能被接受一次 主题 ...
- vscode 常用配置
{ "workbench.iconTheme": "vscode-icons", "editor.tabSize": 2, "ed ...
- css揭秘
一:渐变 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向 background: linear-gradient(direction, color-sto ...
- [uva] 1671 History of Languages
题目描述 输入两个DFA,判断是否等价. https://uva.onlinejudge.org/external/16/1671.pdf 输入 第一行T 可以接受的字母表 第二行N 状态数 接下去N ...
- OpenDigg前端开源项目月报201704
由OpenDigg 出品的前端开源项目月报第一期来啦.我们的前端开源月报集合了OpenDigg一个月来新收录的优质前端开源项目,方便前端开发人员便捷的找到自己需要的项目工具. reactide Rea ...
- [转]RDL Report in Visual Studio New page per Record
本文转自:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/f58cd5cf-4296-40f0-b3c8-7e4e15d73762/r ...
- 小白学习之Code First(三)
上下文Context类中的base构造器的几个方法重置(1.无参 2.database name 3 . 连接字符串) 无参:如果基类base方法中无参,code first将会以 :{Namespa ...
- CLR via C# 读书笔记-26.线程基础
前言 这俩个月没怎么写文章做记录分享,一直在忙项目上线的事情,但是学习这件事情,停下来就感觉难受,clr线程这章也是反复看了好多遍,书读百遍其义自见,今天我们来聊下线程基础 1.进程是什么,以及线程起 ...
- WebForm控件多字段绑定
一.这里的多字段绑定是什么意思? 多字段绑定控件其实就是把两个字段显示在一起作为一个字段现在控件上! 可能读者看了可能还是有点懵逼,说的还是比较抽象!的确,光从这上面的确是无法具体到某特定一种情况!那 ...