Docker Machine
Docker Machine 是一个 docker 管理工具,它解决了 docker 的两个问题:
- docker 只能运行在 Linux 上
- docker 只能管理运行本机的 docker 镜像。
本质上 docker-machine 是一个虚拟机管理工具,它通过创建一个安装好 docker 的虚拟机(支持 VirtualBox,DigitalOcean,EC2 等),并设置对应的环境变量(DOCKER_HOST,DOCKER_MACHINE_NAME 等),使得本地的 docker 工具获得透明远程操作虚拟机的能力。从而使本身不支持 docker 的 Windows 和 Mac 系统能够直接使用 docker 命令。
Docker Compose
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。Compose 定位是 “定义和运行多个 Docker 容器的应用”。
Compose 中有两个重要的概念:
- 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。-
- 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
Docker Install
Docker CE is supported on CentOS 7.3 64-bit.
- Set up the repository
Set up the Docker CE repository on CentOS:
sudo yum install -y yum-utils |
- Get Docker CE
Install the latest version of Docker CE on CentOS:
sudo yum -y install docker-ce |
Start Docker:
sudo systemctl start docker |
- Test your Docker CE installation
Test your installation:
sudo docker run hello-world |
DaoCloud Docker 镜像加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://2f45f2ee.m.daocloud.io |
Docker Swarm Mode
Docker 从 v1.12.0 后开始集成 swarm mode(swarmkit),关于 swarm 的所有操作可以直接使用 docker swarm 命令来完成。Docker Swarm 是 docker 原生的用于管理 docker 集群的工具,内置 kv 存储功能,不再需要外置的 etcd,目前的功能主要有:
- Docker 节点集群的管理,包括集群的创建,master,worker 节点的加入删除。
- 服务的管理,包括 service 的创建删除,update,scale 等。
- 跨主机的网络管理(overlay)
- 服务发现(内建 DNS 服务,服务可以通过 dns 发现)
- 服务负载均衡 LB(端口暴露 routing meshing, VIP, DNS-round-robin)
Swarm 就是一个运行 docker engine 的节点(node)的集合。这个节点集合可以用来发布和编排服务。而加入到这个 swarm 中的 node 就是运行在 swarm mode。
容器网络方案
隧道方案
特点是对底层的网络没有过高的要求,一般来说只要是三层可达就可以,只要是在一个三层可达网络里,就能构建出一个基于隧道的容器网络。问题也很明显,一个大家共识是随着节点规模的增长复杂度会提升,而且出了网络问题跟踪起来比较麻烦,大规模集群情况下这是需要考虑的一个点。
Overlay
Overlay 网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在 IP 报文之上的新的数据格式。这样不但能够充分利用成熟的 IP 路由协议进程数据分发,而且在 Overlay 技术中采用扩展的隔离标识位数,能够突破 VLAN 的 4000 数量限制,支持高达 16M 的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。因此,Overlay 网络实际上是目前最主流的容器跨节点数据传输和路由方案。
Overlay 网络的实现方式可以有许多种,其中 IETF(国际互联网工程任务组)制定了三种 Overlay 的实现标准,分别是:虚拟可扩展 LAN(VXLAN)、采用通用路由封装的网络虚拟化(NVGRE)和无状态传输协议(SST),其中以 VXLAN 的支持厂商最为雄厚,可以说是 Overlay 网络的事实标准。
路由方案
路由技术从三层实现跨主机容器互通,没有 NAT,效率比较高,和目前的网络能够融合在一起,每一个容器都可以像虚拟机一样分配一个业务的 IP。但路由网络也有问题,路由网络对现有网络设备影响比较大,路由器的路由表应该有空间限制一般是两三万条。而容器的大部分应用场景是运行微服务,数量集很大。如果几万新的容器 IP 冲击到路由表里,导致下层的物理设备没办法承受;而且每一个容器都分配一个业务 IP,业务 IP 消耗会很快。
Calico
基于 BGP 协议的路由方案,支持很细致的 ACL 控制,对混合云亲和度比较高。 Calico 是一个纯 3 层的数据中心网络方案,而且无缝集成像 OpenStack 这种 IaaS 云架构,能够提供可控的 VM、容器、裸机之间的 IP 通信。 Calico 是一个基于 BGP 协议的虚拟网络工具,在数据中心中的虚拟机、容器或者裸金属机器(在这里都称为 workloads)只需要一个 IP 地址就可以使用 Calico 实现互连。 Workloads 间的网络隔离是通过 iptables 实现的。相比其他基于模拟的二层网络,Calico 更加简单
Calico 网络搭建
- 安装 Docker
- 安装 ETCD
yum install etcd -y |
搭建集群参考命令
etcd -name node1 -initial-advertise-peer-urls http://192.168.255.232:2380 \ |
- 安装 Calico
https://github.com/projectcalico/calicoctl/releases
mv calicoctl /usr/local/bin/ |
CalicoCtl 要求
- 所有主机 IP 互通
- ECTD 集群
- 多主机网络 Docker
- Docker 版本 1.9 及以上
- Docker daemon 必须配置一个集群存储,配置
cluster-store
|
calicoctl node run |
calicoctl node status |
创建 Calico 自定义网络 分配 IP 池
cat << EOF | calicoctl create -f - |
使用 Calico 网络的容器之间,可以通过 IP 直接通讯。如果要对外提供服务,还需要配置 calico profile 策略以及 iptables 规则。
- apiVersion: v1 |
开启 linux 包转发功能。
vi/etc/sysctl.conf |
测试
docker run --net calico_10_20 --name workload-A -tid busybox |