上一篇文章中我简单介绍了下如何安装并使用Docker,但是在实际的应用中,只是使用这些指令不足以应对更加复杂的场景,于是我们需要了解下Docker三剑客-三样非常好用的Docker工具。
Docker三剑客:Docker Compose、Docker Machine、Docker Swarm
Docker Compose:它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。它可以帮助我们解决一个项目需要同时部署多个docker服务的问题。
它包含两个核心概念:
服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
具体使用:
安装docker compose
$ sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
运行docker compose
docker-compose up
其核心内容就是docker-compose.yml,主要关键字为services,在services下面撰写对应的镜像/服务信息。若对上述实例不清楚的可以参见我的另一篇文章借鉴下如何实战docker-compose:
Docker Machine:Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。
使用:
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.16.1/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
完成后,查看版本信息。
$ docker-machine -v
docker-machine version 0.16.1, build cce350d7
使用 virtualbox 类型的驱动,创建一台 Docker 主机,命名为 test。
$ docker-machine create -d virtualbox test
你也可以在创建时加上如下参数,来配置主机或者主机上的 Docker。
--engine-opt dns=114.114.114.114 配置 Docker 的默认 DNS
--engine-registry-mirror https://registry.docker-cn.com 配置 Docker 的仓库镜像
--virtualbox-memory 2048 配置主机内存
--virtualbox-cpu-count 2 配置主机 CPU
更多参数请使用 docker-machine create --driver virtualbox --help 命令查看。
Docker Swarm:Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
节点:
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
节点分为管理 (manager) 节点和工作 (worker) 节点。
管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。
工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。
服务和任务:
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
global services 每个工作节点上运行一个任务
两种模式通过 docker service create 的 --mode 参数指定。
来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。
使用:
初始化集群
docker swarm init
执行 docker swarm init 命令的节点自动成为管理节点
增加工作节点
docker-machine ssh worker1
查看集群
docker node ls
部署服务
我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。
新建服务
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
查看服务
使用 docker service ls 来查看当前 Swarm 集群运行的服务
查看服务详情
使用 docker service ps 来查看某个服务的详情。
使用 docker service logs 来查看某个服务的日志。
我们可以使用 docker service scale 对一个服务运行的容器数量进行伸缩。
$ docker service scale nginx=2
使用 docker service rm 来从 Swarm 集群移除某个服务。
部署服务结合docker-compose
部署服务使用 docker stack deploy,其中 -c 参数指定 compose 文件名。
$ docker stack deploy -c docker-compose.yml wordpress
查看服务
docker stack ls
移除服务
docker stack down
如有疑问,请参考Docker从入门到实战
参考文章:Docker底层实现、这可能是最为详细的Docker入门吐血总结
未完待续。。。