docker1.9 network跨主机安装
2015-12-25 11:54
661 查看
背景:在跨host中,如果docker任何一个重启或者销毁,docker暴露的端口以及ip将可能重新配置,这个时候需要重新记录ip跟端口。在生产环境中往往需要一个固定的ip以及端口去跟容器通信。例如mysql跟php配置,如果在php配置里面写了mysql配置如10.0.0.1:3306如果mysql在不同host里面不能使用link,这个时候mysql需要重启,造成ip以及端口改变,现在只能修改用户php里面配置。
解决方案:通过dockernetwork可以解决这个问题
架构设计:network需要一个key-value的存储系统来存储network里面各个节点信息以及状态,并且需要安装swarm来管理docker的各个容器。在慕课网生产中我们需要一个稳定的高可用的架构设计来满足这个需要
一些说明:
使用zookeeper集群作为key-value记录中心避免单点
在docker里面使用多个swarm-manger一般是三个,监控整个docker容器状况。
容器通过network进行通信。
Network的安装
一.ubuntu安装步骤
1.在ubuntu上安装docker(最新版本1.9.1)
执行curl-Sslhttps://get.docker.com/|sh
2.安装完成后
vi/etc/default/docker(更新2375接收端口,修改docker_root目录,加入可信私有registry)
DOCKER_OPTS="-D-H0.0.0.0:2375-Hunix:///var/run/docker.sock--graph/data/docker--insecure-registryimgstore.imooc.com"
3.保存并servicedockerrestart
4.安装设置程序开机自动启动的工具(ubuntu下没有chkconfig命令)
apt-getinstallsysv-rc-conf-y
sysv-rc-confdockeron(使得docker随机器启动)
5.ubuntu14.04升级到3.16内核(原为3.13)
apt-getinstalllinux-generic-lts-utopic-y
然后直接重启即可
二.Docker的network安装
1.安装consul
命令如下
DOCKER_OPTS="-D-H0.0.0.0:2375-Hunix:///var/run/docker.sock--graph/data/docker--insecure-registryimgstore.imooc.com
-cluster-store=consul://$(CONUSL-IP):8500//network存储地址--cluster-advertise=$(HOSTIP):2376"//swarm通知地址
安装中出现的错误情况:
1.这个在1.9里面已经进入bug,,下个版本可能会修复
错误:
Errorresponsefromdaemon:Cannotstartcontainer20b1998041019a5dc1e709a7814fd411d946a548f2f0644b1813d2f3c345c90a:subnetsandboxjoinfailedfor"10.10.10.0/24":errorcreatingvxlaninterface:fileexists
解决方案:
#servicedockerstop
dockerstop/waiting
node2:~#umount/var/run/docker/netns/*
node2:~#rm/var/run/docker/netns/*
node2:~#servicedockerstart
dockerstart/running,process17138
node2:~#dockerrun-it--namecontainer2--rm--netREDbusybox
解决方案:通过dockernetwork可以解决这个问题
架构设计:network需要一个key-value的存储系统来存储network里面各个节点信息以及状态,并且需要安装swarm来管理docker的各个容器。在慕课网生产中我们需要一个稳定的高可用的架构设计来满足这个需要
一些说明:
使用zookeeper集群作为key-value记录中心避免单点
在docker里面使用多个swarm-manger一般是三个,监控整个docker容器状况。
容器通过network进行通信。
Network的安装
一.ubuntu安装步骤
1.在ubuntu上安装docker(最新版本1.9.1)
执行curl-Ssl
2.安装完成后
vi/etc/default/docker(更新2375接收端口,修改docker_root目录,加入可信私有registry)
DOCKER_OPTS="-D-H0.0.0.0:2375-Hunix:///var/run/docker.sock--graph/data/docker--insecure-registryimgstore.imooc.com"
3.保存并servicedockerrestart
4.安装设置程序开机自动启动的工具(ubuntu下没有chkconfig命令)
apt-getinstallsysv-rc-conf-y
sysv-rc-confdockeron(使得docker随机器启动)
5.ubuntu14.04升级到3.16内核(原为3.13)
apt-getinstalllinux-generic-lts-utopic-y
然后直接重启即可
二.Docker的network安装
1.安装consul
命令如下
sudoapt-getinstall-yunzipcurl
cd/tmp/
wgethttps://dl.bintray.com/mitchellh/consul/0.5.2_linux_amd64.zip-Oconsul.zip
unzipconsul.zip
mvconsul/usr/local/bin
chmod+x/usr/local/bin/consul
wgethttps://dl.bintray.com/mitchellh/consul/0.5.2_web_ui.zip-Odist.zip
unzipdist.zip
mkdir–p/home/consul
mvdist/home/consul/
mkdir–p/data/consul
2.启动consul
consulagent-server-bootstrap-expect1-data-dir/data/consul-ui-dir/home/consul/dist-client0.0.0.0
UI默认地址是http://localhost:8500/ui 如果UI没有启动,需要添加额外的-client0.0.0.0参数重启Consult代理。
3.设置docker使用consul作为network的配置
首先需要编辑docker配置文件
Servicedockerstop
Cd/etc/default/
Vidocker
DOCKER_OPTS="-D-H0.0.0.0:2375-Hunix:///var/run/docker.sock--graph/data/docker--insecure-registryimgstore.imooc.com
-cluster-store=consul://$(CONUSL-IP):8500//network存储地址--cluster-advertise=$(HOSTIP):2376"//swarm通知地址
Servicedockerstart
4.启动swarm程序
a.首先启动master 在host1上启动master
dockerrun-ti-d--restart=always--nameconsul-swarm-manager\
swarm:latestm--replication–addr$(HOSTIP):($SWARM-PORT)--hosttcp://0.0.0.0:($SWARM-PORT)consul://(CONSUL-IP):8500\
注意:SWARM-PORT可以是任何一个没有使用的端口
CONSUL-IP是你最初安装consul的地址
b.在host2上启动swarm-agent
dockerrun-ti-d--restart=always--nameconsul-swarm-agent\
swarm:latestj--addr(HOSTIP):2376consul://(CONSUL-IP):8500\
注意这里—addr需要监控端口是2376
5.创建overlay网络
dockernetworkcreate--driveroverlaymy-net[/code]
6.创建容器
通过使用刚才创建的my-net网络可以做到跨主机通信于网络隔离
a.在host1上面创建ubuntu-1
dockerrun
-itd--name=ubuntu-1--net
=my-net
ubuntu
b.在host2上面创建ubuntu-2
dockerrun
-itd--name=ubuntu-2--net
=my-net
ubuntu
7.测试case
a.在host1里面运行
dockerattachubuntu-1进入ubuntu-1
使用pingubuntu-2能ping通
b.在host2里面运行
dockerattachubuntu-2进入ubuntu-2
使用netcat–l1234监控1234端口
在host1里面的ubuntu-1里面运行
echo”hello,ubuntu-2”|netcatubuntu-21234
host2里面能收到hello,ubuntu-2
c.销毁ubuntu-2
dockerrm–fubuntu-2
在ubuntu-1里面使用pingubuntu-2ping不通
重新创建ubuntu-2
dockerrun
-itd--name=ubuntu-2--net
=my-net
ubuntu
在ubuntu-1里面能ping通
安装中出现的错误情况:
1.这个在1.9里面已经进入bug,,下个版本可能会修复
错误:
Errorresponsefromdaemon:Cannotstartcontainer20b1998041019a5dc1e709a7814fd411d946a548f2f0644b1813d2f3c345c90a:subnetsandboxjoinfailedfor"10.10.10.0/24":errorcreatingvxlaninterface:fileexists
解决方案:
#servicedockerstop
dockerstop/waiting
node2:~#umount/var/run/docker/netns/*
node2:~#rm/var/run/docker/netns/*
node2:~#servicedockerstart
dockerstart/running,process17138
node2:~#dockerrun-it--namecontainer2--rm--netREDbusybox
相关文章推荐
- 使用Compose变量定制Docker网络
- 使用Compose变量定制Docker网络
- Docker核心技术
- Docker核心技术
- 【Docker技术入门与实战】存出和载入镜像
- docker中文 docker手册 docker教程
- 深刻理解Docker镜像大小
- Docker Image管理学习笔记
- Allen 谈 Docker 系列
- 深入分析Docker镜像原理
- python3操作Docker Remote API
- docker命令整理,python,环境测试
- 阿里云Centos6.6安装配置docker
- Docker run 命令
- Docker实战(九):Docker安装ELK环境
- 将要改变IT世界的的docker技术是什么?
- Dockerfile(SSH+iperf)
- 进入docker容器之nsenter脚本
- 进入docker容器之nsenter
- docker删除挂载数据卷以及容器数据卷