本次分享给大家介绍Docker 的高级特性与相应的工具。 它们就是Docker 三剑客,Compose、Machine和Swarm
Compose
介绍
Docker Compose 是Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
Compose 定位是 「定义和运行多个Docker 容器的应用(Defining and running multi-container Docker applications)」
其前身是开源项目Fig。其代码目前在https://github.com/docker/compose 上开源。
安装
1 | pip install -U docker-compose |
或
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
使用
Dockerfile
1 | FROM python:3.7-slim |
app.py
1 | from flask import Flask |
docker-compose.yml
1 | version: "3" |
执行 docker-compose build 可生成镜像
执行 docker-compose up 启动容器运行
浏览器访问
命令说明
Machine
介绍
Docker Machine 是Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装Docker环境。
使用
使用 virtualbox 类型的驱动,创建一台Docker 主机,命名为 manager。
1 | docker-machine create -d virtualbox manager |

可以在创建时加上如下参数,来配置主机或者主机上的Docker。
1 | --engine-opt dns=114.114.114.114 配置Docker 的默认DNS |
更多参数请使用 docker-machine create —help 命令查看。
docker-machine ls 查看主机

docker-machine env manager 查看环境变量

切换 docker 主机 manager 为操作对象
1 | eval $(docker-machine env manager) |
或者可以 ssh 登录到 docker 主机
1 | docker-machine ssh manager |

命令说明

Swarm
Swarm 是使用SwarmKit 构建的Docker 引擎内置(原生)的集群管理和编排工具。

使用
初始化集群
在上节介绍 docker-machine 的时候,我们创建了manager节点,而初始化集群需要在管理节点内执行
docker swarm init --advertise-addr=IP_ADDR 
现在来创建两个工作节点worker1, worker2并加入集群
1 | docker-machine create -d virtualbox worker1 |

同理worker2 节点
进入manager 节点执行
docker node ls

由此,我们就得到了一个最小化的集群。
命令说明 
疑难解答
- 在
docker stack deploy –c docker-compose.yml后,在docker ps中无法看到端口映射?

关于docker swarm mode 部署后端口的问题,可以使用docker service ls来查看端口是否正确暴露,因为此时是通过service来暴露的,并不是直接在container上暴露,所以此时用docker ps是看不到的,但暴露的端口依旧可以访问,这样实现和k8s里的service实现是有些相似的。
- 执行
docker-compose -f docker-compose.yml up -d,返回
1 | Pulling myapp (friendlyhello:v2)... |
compose文件中如果已经build过,就用image直接指定这个image,注释掉build的指令。如果没有build过,就放开build指令,执行docker-compose的build它,当然也可以使用docker build来构建它。因为这一块在上一章节已经提到过,所以对于部分这次直接切入的同学可能会有疑惑。而到了docker stack时,已经不支持docker stack来build它了,需要统一使用docker build来构建镜像。