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的各个容器。在慕课网生产中我们需要一个稳定的高可用的架构设计来满足这个需要

一些说明:

  1. 使用zookeeper集群作为key-value记录中心避免单点
  2. 在docker里面使用多个swarm-manger一般是三个,监控整个docker容器状况。
  3. 容器通过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
docker run -itd --name=ubuntu-1 --net=my-net  ubuntu
b.在host2 上面创建ubuntu-2
docker run -itd --name=ubuntu-2 --net=my-net  ubuntu
 
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
docker run -itd --name=ubuntu-2 --net=my-net  ubuntu
在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

时间: 2024-10-29 19:11:40

docker1.9 network跨主机安装的相关文章

centos7下安装docker(15.3跨主机网络-macvlan)

除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlan macvlan本身是linu kernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多个interface,每个interface可以配置自己的ip.macvlan本身是一种网卡虚拟化技术,Docker用macvlan实现容器网络就不奇怪了 macvlan最大的优点是性能极好,相比其他方案,macvlan不需要创建Linux bridge,而是直接通过以太interface连接到物理网络.

centos7下安装docker(14.2跨主机网络-overlay)

为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网二层服务,但是拥有更强的扩展性和灵活性. Docker overlay网络需要一个key-value数据库用于保存网络信息状态,包括Network,Endpoint,IP等.Consul,Etcd和Zookeeper都是docker支持的key-value软件,今天讨论的是consul 试验环境描述

centos7下安装docker(15.6docker跨主机网络---Weave)

Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端口映射.除此之外,weave的DNS模块是容器可以通过hostname访问 weave不依赖分布式数据库(例如:consul和etcd)交换网络信息,每个主机上只需要运行weave组件就能建立起跨主机容器网络,weave网络能够穿透防火墙并运行在部分连接的网络上,weave支持加密网络接连,用户可以

如何实现跨主机之间docker容器通信问题

这里采用最原始的桥接模式来实现跨主机直接docker容器通信问题 一些常用命令 brctl show br0 brctl addbr br0 brctl addif br0 eth0 ifconfig br0 down 1.先安装brctl工具包 apt-get install bridge-utils 2.创建一个docker的桥接网络类型(ip填写和同主机网段的ip) docker network create --subnet=192.168.17.100/16 br0 这里我的宿主机ip

Docker容器的跨主机连接

Docker容器的跨主机连接 使用网桥实现跨主机容器连接 网络拓扑 网络连接使用的是Bridge 操作 修改/etc/network/interfaces文件,分配静态IP地址 1.auto br02.iface br0 inet static3.address 10.211.55.34.netmask 255.255.255.05.gateway 10.211.55.16.bridge_ports eth0 修改/etc/default/docker文件,限定分配IP地址段,防止冲突 1.-b

Docker容器的跨主机访问

Docker容器的跨主机访问 使用网桥实现跨网段访问 主机1 :192.168.22.101  主机2:192.168.22.102 安装网桥管理工具#sudo apt-get install bridge-until 配置网卡地址# sudo vim /etc/network/interfaces 配置其中一块网卡的网络参数,另一块网卡配置参数一样,这里不在演示 重新启动网卡 # sudo /etc/init.d/networking restart 查看网络配置,发现eth0已经没有地址而b

10: docker 跨主机的容器间通信(macvlan / overlay )

docker 跨主机的容器间通信(macvlan) 作用: 虚拟多个mac地址,虚拟出多个网卡给容器用. #创建macvlan网络 docker network create --driver macvlan(要创建的网络类型) --subnet  子网IP段  --gateway 本机网关 -o parent=本机网卡  创建的macvlan网络名称 [[email protected] ~]# docker network create --driver macvlan --subnet 1

docker之跨主机通信

本地workstations虚拟机server1和server2环境为centOS7.7,安装软件为docker-ce,docker版本为19.03.05docker安装就不介绍了,直接进主题.一.准备工作跨主机需要两个独立的网卡:server1和server2添加网卡 [[email protected] ~]# ip addr show 查看网卡是否添加成功 添加成功. macvlan本身是linxu kernel的模块,本质上是一种网卡虚拟化技术.其功能是允许在同一个物理网卡上虚拟出多个网

docker之docker容器flannel模式多网段跨主机通信

一.简介flannel是为实现多网段通信的第三方的解决方案, 是 CoreOS 开发的容器网络解决方案.flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信.每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet.为了在各个主机间共享信息