本文的学习过程主要是通过 Docker 官方文档
花了一段时间学习 Docker swarm,一个docker的容器集群服务,来应对即将到来的高并发项目需求。
Docker machine
Docker machine 是 Docker 官方编排的项目之一,可以理解成一个 Docker 宿主机器的统一管理CLI,自部署不是很好用:目前国内仅仅 aliyun 支持,其他的我在官方文档中没有找到。
Docker machine 的安装十分简单,通过官网提供的脚本即可,For Linux:
$ base=https://github.com/docker/machine/releases/download/v0.14.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine
安装好以后,即可按照相关的操作进行运行。
比如,创建两个虚拟机:
$ docker-machine create --driver virtualbox myvm1 $ docker-machine create --driver virtualbox myvm2
进入虚拟机:
$ docker-machine ssh myvm1
显示虚拟机
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 - virtualbox Running tcp://192.168.99.100:2376 v18.05.0-ce myvm2 - virtualbox Running tcp://192.168.99.101:2376 v18.05.0-ce
然后即可在虚拟机的基础上进行相关的操作,十分方便。
Docker-swarm
Docker swarm 则是一个集群的东西,基本的概念是,每个宿主机器都是一个 worker ,然后大家都加入一个东西,叫做 stack ,stack 里面有许多的 container ,每个宿主机器,也分别是一个 node 。
这个 stack 是依据我们的 service 建立的,stack 中保存着 service 建立的名称,也可以通过 stack 查看相关的节点。
每个 node 都可以运行多个 container ,swarm 会进行 负载均衡 ,这个就很酷了。
[图示](图片已失效) 在官方的例子中,
docker-compose.yml:
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: svtter/get-started:part2
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
复制的 app service 数量为 5。
大体上就是这个样子。
想法
行文至此,想到可以进一步学习,然后去一些相关的社区学习一波。(不过按照之前的经验,很多社区的质量都不高,讨论纯属浪费时间。)
学完这些东西,至少可以把自己的服务器升级一波,做成标准的DevOps,以及充分利用服务器资源了。
Code
GitHub – Svtter/Docker_Swarm_Test: a Docker swarm example project. Reference to official document.