1. Docker简介
1.1 Docker定义
Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 能够将应用程序与基础架构分离,以便快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础架构。通过利用 Docker 快速交付、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行之间的延迟。
通俗来讲,docker是一个类似于虚拟机的容器,这个容器里面可以放应用程序,代码库,编译工具以及构建运行环境。容器轻量可移植,以后发布程序直接发布docker就行,从源主机搬运整个docker到目标机上,即完成了程序发布,省去了重新构建运行环境的复杂过程和时间。容器完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。隔离和安全性允许您在给定主机上同时运行多个容器。
Docker 提供工具和平台来管理容器的生命周期:
- 使用容器开发应用程序及其支持组件。
- 容器成为分发和测试应用程序的单元。
- 准备就绪后,将应用程序部署到生产环境中,作为容器或编排的服务。无论生产环境是本地数据中心、云提供商还是两者的混合,这都是一样的。
1.2 Docker功能
快速迭代应用程序
Docker 容器为开发人员和测试人员提供了统一的运行环境和应用程序,通过容器迁移带来的标准化环境简化了开发生命周期,容器非常适合持续集成、持续交付和持续测试工作流程,也就是devpos。
便捷部署和扩展
Docker 基于容器的平台允许高度可移植的工作负载。Docker 容器可以在开发人员的本地电脑、公司服务器或者虚拟机、云主机等环境运行。
Docker 的可移植性和轻量级特性还使得动态管理工作负载、根据业务需求近乎实时地扩展或拆除应用程序和服务变得容易。
在同一设备上运行多个容器
Docker 轻量而快速,它比虚拟机所需的硬件资源要少的多,因此它可以为经济高效的替代虚拟机,同时在一台设备上可以运行多个容器,节省开销。
1.3 Docker应用范围
Docker 容器无处不在:Linux、Windows、数据中心、云、无服务器等。
Docker 容器技术于 2013 年作为开源Docker Engine推出。
它利用了围绕容器的现有计算概念,特别是在 Linux 中,称为 cgroups 和命名空间的原语。Docker 的技术是独一无二的,因为它关注开发人员和系统运营商将应用程序依赖项与基础设施分离的要求。
Linux的成功推动了与 Microsoft 的合作,将 Docker 容器及其功能引入了 Windows Server。
Docker 及其开源项目提供的技术,Moby 已被所有主要数据中心供应商和云提供商所利用。这些提供商中许多都将 Docker 用于其容器原生 IaaS 产品。此外,领先的开源无服务器框架利用 Docker 容器技术。
2. 容器与虚拟机
容器和虚拟机具有相似的资源隔离和分配优势,但功能不同,因为容器虚拟化的是操作系统而不是硬件。容器更便携、更高效。
容器
容器是应用层的抽象,它将代码和依赖项打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。与 VM 相比,容器占用的空间更少(容器映像的大小通常为数十 MB),可以处理更多应用程序并且需要更少的 VM 和操作系统。
虚拟机
虚拟机 (VM) 是物理硬件的抽象,可将一台服务器变成多台服务器。管理程序允许多个虚拟机在单台机器上运行。每个 VM 都包含操作系统、应用程序、必要的二进制文件和库的完整副本占用数十 GB。VM 的启动速度也可能很慢。
3. Docker结构
3.1 Docker 架构
Docker 使用客户端-服务器架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序使用 REST API,通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许使用由一组容器组成的应用程序。
- Host(主机):安装了Docker程序的机器(Docker直接安装在操作系统之上)。
- Client(客户端):连接docker主机进行操作。
- Registry(仓库):用来保存各种打包好的软件镜像。
- Images(镜像):软件打包好的镜像,放在docker仓库中。
- Container(容器):镜像启动后的实例称为一个容器,容器是独立运行的一个或一组应用。
3.2 Docker三要素
Docker 包括三个基本要素:
- 镜像(Image):镜像是用于创建容器的只读模板,通过Docker build命令创建,镜像相当于一个 root 文件系统。镜像就是静态的模板,运行起来的镜像就是容器。
- 容器(Container):容器是镜像的实例,一个镜像可以创建多个容器,镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器可类比一个简易的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。
- 仓库(Repository):仓库用来存储Docker镜像,可自建私有Registry和使用公用Registry。官方公用仓库为dockerhub(https://hub.docker.com),镜像的安全性和可靠性比较有保障。