docker1.9 network跨主机安装
背景:在跨host中,如果docker任何一个重启或者销毁,docker暴露的端口以及ip将可能重新配置,这个时候需要重新记录ip跟端口。在生产环境中往往需要一个固定的ip以及端口去跟容器通信。例如mysql跟php配置,如果在php配置里面写了mysql配置如10.0.0.1:3306如果mysql在不同host里面不能使用link,这个时候mysql需要重启,造成ip以及端口改变,现在只能修改用户php里面配置。
解决方案:通过docker network可以解决这个问题
架构设计:network需要一个key-value的存储系统来存储network里面各个节点信息以及状态,并且需要安装swarm来管理docker的各个容器。在慕课网生产中我们需要一个稳定的高可用的架构设计来满足这个需要
一些说明:
- 使用zookeeper集群作为key-value记录中心避免单点
- 在docker里面使用多个swarm-manger一般是三个,监控整个docker容器状况。
- 容器通过network进行通信。
Network的安装
一.ubuntu安装步骤
1.在ubuntu上安装docker(最新版本 1.9.1)
执行curl -Ssl https://get.docker.com/ | sh
2.安装完成后
vi /etc/default/docker (更新2375接收端口,修改docker_root目录,加入可信私有registry)
DOCKER_OPTS="-D -H 0.0.0.0:2375 -H unix:///var/run/docker.sock --graph /data/docker --insecure-registry imgstore.imooc.com"
3.保存并service docker restart
4.安装设置程序开机自动启动的工具(ubuntu下没有chkconfig命令)
apt-get install sysv-rc-conf -y
sysv-rc-conf docker on (使得docker随机器启动)
5.ubuntu14.04升级到3.16内核 (原为3.13)
apt-get install linux-generic-lts-utopic -y
然后直接重启即可
二.Docker的network安装
1.安装consul
命令如下
sudo apt-get install -y unzip curl
cd /tmp/
wget https://dl.bintray.com/mitchellh/consul/0.5.2_linux_amd64.zip -O consul.zip
unzip consul.zip
mv consul /usr/local/bin
chmod +x /usr/local/bin/consul
wget https://dl.bintray.com/mitchellh/consul/0.5.2_web_ui.zip -O dist.zip
unzip dist.zip
mkdir –p /home/consul
mv dist /home/consul/
mkdir –p /data/consul
2.启动consul
consul agent -server -bootstrap-expect 1 -data-dir /data/consul -ui-dir /home/consul/dist -client 0.0.0.0
UI默认地址是http://localhost:8500/ui
如果UI没有启动,需要添加额外的-client 0.0.0.0参数重启Consult代理。
3.设置docker使用consul作为network的配置
首先需要编辑docker配置文件
Service docker stop
Cd /etc/default/
Vi docker
DOCKER_OPTS="-D -H 0.0.0.0:2375 -H unix:///var/run/docker.sock --graph /data/docker --insecure-registry imgstore.imooc.com
-cluster-store=consul://$(CONUSL-IP):8500 //network存储地址 --cluster-advertise=$(HOSTIP):2376" //swarm通知地址
Service docker start
4.启动swarm程序
a.首先启动master
在host1上启动master
docker run -ti -d --restart=always --name consul-swarm-manager \
swarm:latest m --replication –addr $(HOSTIP):($SWARM-PORT) --host tcp://0.0.0.0:($SWARM-PORT) consul://(CONSUL-IP):8500 \
注意:SWARM-PORT可以是任何一个没有使用的端口
CONSUL-IP是你最初安装consul的地址
b.在host2上启动swarm-agent
docker run -ti -d --restart=always --name consul-swarm-agent \
swarm:latest j --addr (HOSTIP):2376 consul:// (CONSUL-IP):8500 \
注意这里—addr需要监控端口是2376
5.创建overlay网络
docker network create --driver overlay my-net
6.创建容器
通过使用刚才创建的my-net网络可以做到跨主机通信于网络隔离
a.在host1上面创建ubuntu-1
dockerrun-itd --name=ubuntu-1 --net=my-netubuntu
b.在host2 上面创建ubuntu-2
dockerrun-itd --name=ubuntu-2 --net=my-netubuntu
7.测试case
a.在host1里面运行
docker attach ubuntu-1进入ubuntu-1
使用ping ubuntu-2能ping通
b.在host2里面运行
docker attach ubuntu-2 进入ubuntu-2
使用 netcat –l 1234监控1234端口
在host1里面的ubuntu-1里面运行
echo ”hello,ubuntu-2” | netcat ubuntu-2 1234
host2 里面能收到 hello,ubuntu-2
c.销毁ubuntu-2
docker rm –f ubuntu-2
在ubuntu-1里面使用ping ubuntu-2 ping不通
重新创建ubuntu-2
dockerrun-itd --name=ubuntu-2 --net=my-netubuntu
在ubuntu-1里面能ping通
安装中出现的错误情况:
1. 这个在1.9里面已经进入bug,,下个版本可能会修复
错误:
Error response from daemon: Cannot start container 20b1998041019a5dc1e709a7814fd411d946a548f2f0644b1813d2f3c345c90a: subnet sandbox join failed for "10.10.10.0/24": error creating vxlan interface: file exists
解决方案:
# service docker stop
docker stop/waiting
node2:~# umount /var/run/docker/netns/*
node2:~# rm /var/run/docker/netns/*
node2:~# service docker start
docker start/running, process 17138
node2:~# docker run -it --name container2 --rm --net RED busybox
docker1.9 network跨主机安装的更多相关文章
- centos7下安装docker(15.5容器跨主机网络--flanneld)
flannel是由CoreOS研究的一种覆盖网络(overlay network)网络工具,目的是帮助每一个host主机有一个完整的子网: 功能是:让集群中不同节点的主机创建的容器都有一个唯一的虚拟I ...
- centos7下安装docker(15.4跨主机网络-flannel)
flannel是CoreOS开发的容器网络解决方案,flannel为每一个host分配一个subnet,容器从这些subnet中分配IP,这些IP可以在host之间路由,容器无需NAT和port ma ...
- centos7下安装docker(15.3跨主机网络-macvlan)
除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlan macvlan本身是linu kernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多个int ...
- centos7下安装docker(15.2跨主机网络-overlay)
为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网 ...
- 安装docker跨主机网络flannel
一.实验环境 机器 操作系统 安装服务 172.16.4.36 centos7 docker etcd flannel 172.16.4.37 centos7 docker etcd flanne ( ...
- centos7下安装docker(16.docker跨主机存储)
从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态:是指容器在运行的过程中不需要保存数据,每次访问的结果不依赖上一次的访问,比如提供静态页 ...
- centos7下安装docker(15.6docker跨主机网络---Weave)
Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...
- centos7下安装docker(15.1跨主机网络)
之前学习了单个host上的网络,我们知道单个host上的网络有:none,host,bridge和joined,他们解决了单个host上面的容器通信的问题:接下来我们讨论跨主机间容器通信的方案 跨主机 ...
- Docker容器的跨主机连接
Docker容器的跨主机连接 Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态I ...
随机推荐
- 《转》深入理解Activity启动流程(二)–Activity启动相关类的类图
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 在介绍Activity的详细启动流程之前,先为大家介绍Act ...
- OMAP4之DSP核(Tesla)软件开发学习(二)Linux内核驱动支持OMAP4 DSP核
注:必须是Linux/arm 3.0以上内核才支持RPMSG,在此使用的是.config - Linux/arm 3.0.31 Kernel Configuration.(soure code fro ...
- show()是非模式窗体. showDialog()是模式窗体.
show()仅仅是显示出来窗口界面而已```也就是和你执行的结果在同一窗口显示```所显示的窗口可以在后台运行```而showDialog()是一个对话框窗口界面```执行结果以新窗口界面出现```不 ...
- iOS-----多线程之NSThread
多线程 iOS平台提供了非常优秀的多线程支持,程序可以通过非常简单的方式来启动多线程,iOS平台不仅提供了NSThread类来创建多线程,还提供了GCD方式来简化多线程编程,提供了NSOperatio ...
- Python数据类型-01.数字和布尔值
本节主要介绍Python中的基础知识中的数据类型,数字和布尔值 介绍几个知识点:1)内置函数print()的用法,直接打印括号里面的内容,或者print后跟多个输出,以逗号分隔.2)内置函数type( ...
- 【C++基础】sort函数
sort函数的时间复杂度为O(n*logn),排序方法类似于快排. # 头文件 #include<algorithm> using namespace std; # 参数 第一个参数:要排 ...
- 【liunx】nslookup命令
“nslookup”域名解析是什么? 假设我们要开个网站,首先我们要去提供域名申请的机构申请域名,然后绑定一个IP地址, 域名比较容易记忆,不像IP地址都是数字,申请完域名,绑定域名,DNS就写入域名 ...
- 洛谷P4197 Peaks(Kruskal重构树 主席树)
题意 题目链接 往后中文题就不翻译了qwq Sol 又是码农题..出题人这是强行把Kruskal重构树和主席树拼一块了啊.. 首先由于给出的限制条件是<=x,因此我们在最小生成树上走一定是最优的 ...
- hasura graphql schema 导出
使用的是apollo 的插件 安装apollo npm install -g apollo 基本使用 因为我使用了模式拼接,所以地址有变动,一般是 http://host:port/v1alpha1/ ...
- linux之 multipath 多路径
一.什么是多路径 普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系.而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来 ...