官方创建overlay网络
Step 1: Set up a key-value store
overlay网络需要key-value存储。存储内包含一些网络状态:discovery, networks, endpoints, ip-addresses等。docker支持Consul,Etcd以及Zookeeper(分布式存储)key-value 存储。以下以Consul为例。
1.登陆安装好以下软件等系统:
Docker Engine, Docker Machine, and VirtualBox software.
2.创建一个名叫 mh-keystore 的machine.
$ docker-machine create -d virtualbox mh-keystore
当你配置好了一个machine, 该进程将给主机添加Docker Engine。这意味着你无需手动安装Consual,而是使用Docker HUB上的Consual镜像来创建。下一步将执导你怎么做。
3.在 mh-keystore machine 上启动 progrium/consul 容器.
$ docker $(docker-machine config mh-keystore) run -d \
-p "8500:8500" \
-h "consul" \
progrium/consul -server -bootstrap
该命令将启动aprogrium/consul 镜像在mh-keystore machine上创建容器,consuland监听端口是8500.
4.给 mh-keystore machine设置本地的环境变量.
$ eval "$(docker-machine env mh-keystore)"
5.使用docker run 查看consul container.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d51392253b3 progrium/consul "/bin/start -server -" 25 minutes ago Up 25 minutes 53/tcp, 53/udp, 8300-8302/tcp, 0.0.0.0:8500->8500/tcp, 8400/tcp, 8301-8302/udp admiring_panini
Step 2: Create a Swarm cluster
在该步骤, 你将使用 docker-machine 来扩展主机网络. 针对这点,你不是真的创建一个网络. 而是在VirtualBox中创建了一些machines .其中一个 machine 将被当作Swarm master; 首先你得创建它. 当你创建完所有主机之后,你要将overlay网络驱动需要的配置参数传递给Engine。
1.创建Swarm master.
$ docker-machine create \
-d virtualbox \
--swarm --swarm-image="swarm" --swarm-master \
--swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
mhs-demo0
在创建期间, 你要给 Engine daemon提供 --cluster-store 参数. 这个参数告诉Engine ,overlay 网络所需要的Key-value存储的位置。脚本$(docker-machine ip mh-keystore) 解析出你在第一步中创建的Consul server的IP address 。--cluster-advertise 参数advertises 将在网络上暴露 machine 。
2.创建其它主机加入到集群中.
$ docker-machine create -d virtualbox \
--swarm --swarm-image="swarm:1.0.0-rc2" \
--swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \
--engine-opt="cluster-advertise=eth1:2376" \
mhs-demo1
3.列出machines来验证集群是否启动。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default virtualbox Running tcp://192.168.99.100:2376
mh-keystore virtualbox Running tcp://192.168.99.103:2376
mhs-demo0 virtualbox Running tcp://192.168.99.104:2376 mhs-demo0 (master)
mhs-demo1 virtualbox Running tcp://192.168.99.105:2376 mhs-demo0
此时你已经有了运行在网络上的主机,我们准备利用这些主机为容器创建多主机网络。保持终端连接来进行下一步。
Step 3: Create the overlay Network
创建 overlay 网络
1.为 Swarm master设置docker环境。
$ eval $(docker-machine env --swarm mhs-demo0)
使用 --swarm 参数 with docker-machine 限制 the dockercommands to Swarm information alone.
2.使用docker info 查看Swarm.
$ docker info
Containers: 3
Images: 2
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 2
mhs-demo0: 192.168.99.104:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.021 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.1.10-boot2docker, operatingsystem=Boot2Docker 1.9.0-rc1 (TCL 6.4); master : 4187d2c - Wed Oct 14 14:00:28 UTC 2015, provider=virtualbox, storagedriver=aufs
mhs-demo1: 192.168.99.105:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.021 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.1.10-boot2docker, operatingsystem=Boot2Docker 1.9.0-rc1 (TCL 6.4); master : 4187d2c - Wed Oct 14 14:00:28 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 2
Total Memory: 2.043 GiB
Name: 30438ece0915
从以上信息看出,在Master运行了3个容器以及保存了2个镜像。
3.创建 overlay 网络.
$ docker network create --driver overlay my-net
你只需在其中一台机器上创建一个overlay的网络即可.在本例中,我们使用master创建了一个overlay网络,但是你也可以在集群的其它任何主机上使用它。
4.验证网络是否可用:
$ docker network ls
NETWORK ID NAME DRIVER
412c2496d0eb mhs-demo1/host host
dd51763e6dd2 mhs-demo0/bridge bridge
6b07d0be843f my-net overlay
b4234109bd9b mhs-demo0/none null
1aeead6dd890 mhs-demo0/host host
d0bb78cbe7bd mhs-demo1/bridge bridge
1c0eb8f69ebb mhs-demo1/none null
由于你处于Swarm master环境, 你可以看到在所有的 Swarm 代理上的所有网络. 注意每一个 NETWORK ID 唯一的. 默认的网络就是 overlay network.
5.依次切换到each Swarm 代理,然后列出网络
$ eval $(docker-machine env mhs-demo0)
$ docker network ls
NETWORK ID NAME DRIVER
6b07d0be843f my-net overlay
dd51763e6dd2 bridge bridge
b4234109bd9b none null
1aeead6dd890 host host
$ eval $(docker-machine env mhs-demo1)
$ docker network ls
NETWORK ID NAME DRIVER
d0bb78cbe7bd bridge bridge
1c0eb8f69ebb none null
412c2496d0eb host host
6b07d0be843f my-net overlay
所有的节点都展示出它们有ID为 6b07d0be843f 名为my-net的网络 。此时你的overlay网络就运行成功了。