1 Docker BuildKit
BuildKit 是下一代的镜像构建的开源组件(仅支持 Docker版本>1=8.09)
- 更高效:支持并行的多阶段构建、更好的缓存管理;
- 更安全:支持 secret mount,无需 root priviliege;
- 更易于扩展:使用自定义中间语言 LLB,完全兼容 Dockerfile,也可支持第三方语言(目前仅有 Buildpacks),后台目前可支持 runC 和 containerd 两种 worker
设置 COMPOSE_DOCKER_CLI_BUILD=1
环境变量即可使用Buildkit
2 Docker Compose
<code>Compose</code> 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排
- 项目定位:定义和运行(Defining and running)多个 Docker 容器的应用
- Compose 允许用户通过一个单独的
docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project) - Compose 的默认管理对象是项目(
project
):由一组关联的应用容器组成的一个完整业务单元 - Compose 通过子命令对项目中的一组容器(
service
)进行便捷地生命周期管理
初版
Compose
项目由 Python 编写,目前 Docker 官方用 GO 语言 重写 了 Docker Compose,并将其作为了 docker cli 的子命令,称为Compose V2
Compose 快速入门:
- 安装:支持 PIP 安装(
pip install -U docker-compose
)和二进制包安装 - 卸载:执行
pip uninstall docker-compose
或 直接删除二进制文件 - 运行:编写好模板文件
docker-compose.yml
后,执行docker-comnpose up
命令 - 指令:
docker-comnpose
常用命令和选项;模板文件常用指令和语法 - 实战:使用
Docker Compose
配置并运行一个 <code>Django/PostgreSQL</code> 应用
3 Swarm mode
Swarm mode 是使用 <code>SwarmKit</code> 构建的 Docker 的集群管理和编排工具
Swarm mode 从 Docker 1.12 开始内嵌入 Docker 引擎,其主要特性为:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等
Swarm
集群的基础概念:
- 任务 (
Task
)是Swarm
中的最小的调度单位,目前来说就是一个单一的容器 - 服务 (
Services
) 是指一组任务的集合,服务定义了任务的属性 - 管理节点用于
Swarm
集群的管理,docker swarm
命令基本只能在管理节点执行(节点退出集群命令docker swarm leave
可以在工作节点执行)。一个Swarm
集群可以有多个管理节点,但只有一个管理节点可以成为leader
,leader
通过raft
协议实现 - 工作 (
worker
) 节点是任务执行节点,管理节点将服务 (service
) 下发至工作节点执行。管理节点默认也作为工作节点,也可以通过配置让服务只运行在管理节点
Swarm
集群的常见命令:
# 初始化集群, 可使用`--advertise-addr` 指定 IP
docker swarm init --advertise-addr 192.168.99.100
docker swarm join # 增加工作节点
docker node ls # 在管理节点查看集群
docker service create # 新建服务
docker service ls # 查看服务列表
docker service ps # 查看单个服务详情
docker service logs # 查看单个服务日志
docker service scale # 对一个服务运行的容器数量进行伸缩
docker service rm nginx # 从Swarm集群移除某个服务
Swarm
集群中也可以使用模板文件 (docker-compose.yml
) 来配置、启动多个服务
在 Swarm
集群中使用 docker-compose.yml
需要用 docker stack
命令:
docker stack deploy -c docker-compose.yml wordpress # 部署服务
docker stack ls # 查看服务列表
docker stack down wordpress # 移除服务(不能移除数据卷)
docker volume rm # 单独移除数据卷的命令
其他集群操作命令:
- 使用
docker secret
命令来管理敏感信息(密码、密钥证书等) - 使用
docker config
子命令来管理集群中的配置信息(Docker 版本>17.06) - 使用
docker service update
命令实现服务的滚动升级(支持回滚)
4 Etcd 项目
<code>etcd</code> 是 CoreOS
团队发起的一个管理配置信息和服务发现(Service Discovery
)的项目;etcd
的目标是构建一个高可用的分布式键值(key-value
)数据库
etcd
基于 Go
语言实现,并重点考虑了下面四个要素:
- 简单:具有定义良好、面向用户的
API
(gRPC) - 安全:支持
HTTPS
方式的访问 - 快速:支持并发
10 k/s
的写操作 - 可靠:支持分布式结构,基于
Raft
的一致性算法
一般情况下,用户使用 etcd
可以在多个节点上启动多个实例,并添加它们为一个集群。同一个集群中的 etcd
实例将会保持彼此信息的一致性
etcd
快速入门:
- 安装:编译源码,下载二进制文件,使用现成的镜像
quay.io/coreos/etcd
- 数据库操作(CRUD):
etcdctl put
,etcdctl get
,etcdctl del
- 非数据库操作:
etcdctl watch
(监测更新),etcdctl member
( etcd实例管理)
5 Fedora CoreOS
Fedora CoreOS 是一个自动更新的,最小的,整体的,以容器为中心的操作系统
目的:提供最佳的容器主机,以安全,大规模地运行容器化的工作负载
6 Kubernetes
Kubernetes 是 Google 团队发起的开源项目,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及应用伸缩,主要实现语言为 Go 语言。Kubernetes 是:
- 易学:轻量级,简单,容易理解
- 便携:支持公有云,私有云,混合云,以及多种云平台
- 可拓展:模块化,可插拔,支持钩子,可任意组合
- 自修复:自动重调度,自动重启,自动复制
kubectl 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes
7 podman
<code>podman</code> 是一个无守护程序与 docker 命令兼容的下一代 Linux 容器工具
- Podman 提供更高的安全选项。其无守护程序架构允许您运行无 root 容器;专注于运行、部署和管理容器,并为您提供对这些流程的细粒度控制
- Docker 和 Podman 都符合 OCI 标准;可以在开发环境中使用 Docker,在其中创建应用程序镜像(此时安全性不太重要)。然后使用 Podman 在生产环境中运行和维护这些镜像