Docker
Docker:单词意思为码头
,是一个开源的高性能应用容器引擎;
应用场景:高效部署微服务等应用,简化应用的部署和运维;
官方解释:
一个容器不过是一个正在运行的进程,并对其应用了一些附加的封装功能,以使其与宿主主机和其他容器隔离;
容器隔离的最重要方面之一是每个容器都与自己的私有文件系统进行交互,该文件系统由Docker镜像提供;
镜像包括运行应用程序所需的所有内容:代码或二进制文件,运行时依赖项以及所需的任何其他文件系统对象。
Docker和传统虚拟化对比高效的原因是:直接复用本地主机的操作系统,而传统方式则是在硬件层面实现:
1.Docker知识体系
Docker跟生命周期有关的三个基本概念:
- Image(镜像)
- Container(容器)
- Repository(仓库)
镜像 = 由N层只读层组成,每层里存的可能是一个命令,也可能是一个依赖
容器 = 镜像 + 读写层,是镜像的运行实例
仓库 = 同Maven仓库,用来存储镜像,也分公有仓库和私有仓库
Docker核心组件:
- Docker Client
- Docker Daemon
- Docker Image
- Docker Container
- Docker Registry
Docker Client = Docker提供命令行(CLI),用来执行各种命令
Docker Daemon = Docker守护进程,响应来自Docker Client的请求,包含三部分:Server|Engine|Job
Image|Container|Registry上边已解释
Docker官方编排项目(Orchestration)三剑客:
- Docker Compose
- Docker Machine
- Docker Swarm
Docker Compose = 单Docker Daemon的服务编排(单引擎多容器应用部署和管理)
Docker Machine = 在各平台上快速安装Docker环境:Mac|Win|Linux,支持多种后端驱动:本机|虚拟|远程
Docker Swarm = 多Docker Daemon的多服务编排(多引擎多容器应用部署和管理),独有Service|Task概念,部署:单服务|多服务(Stack)
易混淆概念:Docker Compose & Docker Stack,因为Stack也使用Compose的docker-compose.yml
编排服务;
弄清楚之前要先理解Docker Swarm的Service
和Task
:
-
Docker Compose
单个Daemon的服务编排,通过docker-compose.yml
声明各个容器,yml中的service属性
跟Swarm的服务
不是一个概念; -
Docker Stack
Docker Stack是Docker Swarm一部分,用来进行多个Docker Daemon的多服务编排,也使用docker-compose.yml
声明;
它提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚;
对比Docker Compose
在yml中多了deploy
和secrets
等属性,用以声明和支持以上的容器部署
和管理
操作;
yml中的image
属性不支持构建,需要提前打好镜像上传到仓库里;
这是我目前的理解,如有偏差请指出
1.1 Docker知识点
Docker原生知识点梳理:
1.2 Docker架构
Docker各核心组件的功能:
1.3 Docker核心命令
Docker高频命令:
1.4 容器生命周期
从docker run 镜像
生成一个容器–>销毁的完整生命周期:
2 镜像
2.1 镜像的理解
从结构
上说:一个镜像是不可改变的、无状态的,是N个只读层(read-only layer)集合;
从内容
上说:一个镜像是由N个包含命令或者是依赖的只读层集合;
Docker通过快照机制来实现镜像层堆栈,对外将所有镜像层堆叠并合并,保证多镜像层对外展示为统一的文件系统:
通过命令:docker image inspect 镜像名:tag
查看镜像分层情况,执行后返回一个包含各层信息的json串;
下图是通过Portainer
可视化工具查看一个SpringBoot Web应用