所谓编排是指:当你一个应用被分成几个Container运行时候,这些Container需要协同,这就是所谓的编排功能。Orchestration 需要有个框架完成Container间的通信、容器如何连接的配置、容器创建、监控的调度,还有扩展性问题。市面上有容器编排的平台,比如Mesos和Kubernetes,但是Docker本身也提供了编排功能。
Docker Compose可以定义容器间的关系,它是一个client-side工具;Docker Swarm 则在编排系统中用于管理跨多主机的容器。
1. Docker Networks
在网络级别,Docker creates a bridge network on your host. A bridge network gives every container its own IP address, and it allows communication between containers and also between containers and the host.
1.1 创建一个Network
我们创建一个网络并让容器加入它
我们可以用下面这个命令查看容器被分配的IP地址:
yay@10049605-ThinkPad-T470-W10DG:~$ sudo docker network inspect ch05
访问这个IP地址:注意: The bridge is between the container and the host. 如果我们使用Linux,我们就能通过IP地址访问这个容器;但是如果Docker是运行在Mac或者Windows环境下的,Host实际为Linux VM, 此时我们就不能通过这个IP地址访问这个容器。
由于我们还没有publish port 80 on the container, 因此我们不能使用localhost访问Nginx,我们只能使用这个容器的IP地址。
1.2 再建一个容器并加入这个network
上图命令dig是域信息搜索器的简称(Domain Information Groper),其执行结果含义如下:
当然我们也可以通过docker network inspect查看相关信息:
2. Docker Compose
当业务比较复杂(involved)时,我们需要掌握依赖关系,这样才便于部署,其中一种方法是使用Docker Compose。它是一个独立的client工具,采用YAML文件定义你的解决方案架构, 并通过一个单一命令来管理整个容器集合。
2.1 安装Docker Compose
在UNIX环境下,Docker Compose需要单独安装(Window环境下则是和Docker一起被安装的)
yay@10049605-ThinkPad-T470-W10DG:~$ sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
测试:
$ docker-compose --version
2.2 写一个docker-compose.yml
也支持使用--scale参数生成多个Nginx containers(需要指出在docker-compose.yml中配置的容器名称)
可以查看生成的网络: