Docker相对虚机的优势
-
更高效地利用资源
docker不需要运行硬件虚拟以及运行完整操作系统等额外开销;相对虚机,一个相同配置的主机,一般可以运行更多的应用 -
更快速的启动时间
docker容器应用,直接运行于宿主内核,无需启动完整的操作系统,节约开发、测试、部署的时间 -
一致的运行环境
docker的镜像提供了除内核外完整的运行时环境,保证应用运行环境一致性,不会出现开发环境、测试环境、生产环境不一致导致的bug事件。 -
持续交付和部署
docker通过定制应用镜像实现持续集成、持续交付、部署。
开发通过dockerfile进行镜像构建,结合持续集成系统进行系统测试,运维可直接在生产环境快速部署该镜像,也可结合持续部署系统进行自动部署 -
更轻松的迁移
docker确保执行环境一致性,应用迁移更容易,多个平台运行结果一致 -
更轻松的维护和扩展
docker使用分层存储和镜像技术,可使重复部分复用更容易,应用维护更新更简单,基于基础镜像进行扩展镜像更简单。
Docker三大基本概念
一、 镜像(Image)
二、 容器(Container)
三、 仓库(Repository)
- 镜像
- 操作系统分为内核和用户空间,对于linux,内核启动后,会挂载root文件系统为其提供用户空间支持。
- docker镜像,相当于一个root文件系统,镜像不包含动态数据,内容在构建后不会该改变。
- docker镜像提供容器运行时所需要的程序、库、资源、配置、配置参数(匿名卷、环境变量、用户等)
- 分层存储
-
- 利用Union FS技术,将镜像设计为分层存储的架构
-
- 镜像是一个虚拟的概念,有一组文件系统组成或是由多层文件系统联合组成
-
- 镜像一层层构建,前层是后层基础,每一层构建完不发生改变。后一层的任何改变只发生在本层。
-
- 构建镜像时,每一层尽量只包含该层需要的,额外的应在该层构建结束时清理
-
- 分层存储可使得之前构建好的镜像作为基础层,可进一步添加新层
- 容器
- 镜像和容器类似类和实例,镜像是静态定义,容器是镜像运行时的实体,容器可被创建、启动、停止、删除、暂停等
- 容器实质——进程,容器进程运行于属于自己的独立的命名空间,容器可由自己的root文件系统,网络配置,进程空间,用户ID空间。
- 容器进程运行在隔离环境
- 每一个容器运行时以镜像为基础层,在其上创建一个当前容器的存储层,为容器运行时读写准备的存储层为容器存储层
- 容器消亡时,容器存储层也随之消亡,在其上保存的数据也会丢失。
- 最佳实践:容器不应向存储层写数据,保持无状态化
- 所有文件写入操作,应使用数据卷,或绑定宿主目录,这些位置的读写会跳过容器存储层,直接对宿主读写,性能、稳定性更好
- 容器消亡、数据卷不消亡,它的生命周期独立于容器
- 仓库
- 镜像构建完成,若需要在其他服务器使用,需要集中的存储、分发镜像的服务
- 一个docker registry 可包含多个仓库,每个仓库可包含多个标签,一个标签对应一个镜像
- 利用<仓库名>:<标签>指定时那个软件那个版本的镜像