本次分享给大家介绍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来构建镜像。