一、什么是Docker
-
Docker是使用google公司推出的
GO语言
进行开发实现,于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程
进行封装隔离
,属于操作系统层面
的虚拟化技术,由于隔离的进程独立于宿主和其他隔离的进程,因此称为容器。 -
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得Docker比虚拟技术更为轻便、快捷。
二、Docker与VMware
2.1、Docker与VMware的区别
- Docker利用的是宿主机的内核进行容器的资源分配(直接调用硬件资源),隔离的是进程,VMware是在宿主机上虚拟底层硬件环境,通过创建操作系统实现隔离。
- Docker由于没有臃肿的操作系统,启动速度比VMware
快
很多 - Docker的隔离性比VMware差
- Docker的资源利用比VMware大很多,VMware由于是直接虚拟操作系统,而创建时需要分配资源,相同的硬件环境Docker创建的容器及资源的利用率要比VMware多。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
2.2、Docker的优点(为什么使用Docker)
- 更高效的利用系统资源
- 不需要虚拟硬件及运行完整的操作系统等开销
- 更快速的启动时间
- 直接依赖于宿主内核,无需启动操作系统,运行速度达到毫秒或秒级
- 一致的运行环境
- 可提高一致的开发、测试、生产环境
- 持续集成、交付和部署
- 开发人员可以通过
Dockerfile
来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署
(Continuous Delivery/Deployment) 系统进行自动部署
。
- 开发人员可以通过
- 更轻松的迁移
- Docker确保了运行环境的一致性,在不同平台上都能得到相同的运行结果,故其迁移十分便捷。
- 更轻松的维护和扩展
三、Docker的三大基本概念
-
镜像(Image):一个特殊的文件系统(类)
- 操作系统分为
内核
和用户空间
,操作系统启动后,会挂载root文件系统
为其提供用户空间支持,而Docker(Image),就相当于一个root文件系统。 - Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的
程序、库、资源、配置
等文件外,还包含了一些为运行时准备的一些配置参数
(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据
,其内容在构建之后也不会被改变。 - 镜像采用
分层存储的架构
(便于复用、定制,类似于继承),实际有多层文件系统
联合组成。镜像在构建时,会一层一层的构建,前一层是后一层的基础,每一层构建后就不再改变
,后一层的改变只发生在这一层(即删除上一层只是在本层进行标识)
- 操作系统分为
-
容器(Container):镜像运行时的实体(实例)
- 容器与镜像的关系如同OOP中的类与实例一样,
镜像是静态的定义,容器是运行时的实体
,可以被创建、启动、停止、运行和暂停等。 容器的实质是进程
,但与直接在宿主执行的进程不同,其拥有独立的命名空间,而且使用的也是分层存储。- 容器的
存储层
的生命周期和容器一样,容器消亡时其存储层也随之消亡,即存储层的数据都会随着容器的删除而丢失,因此对于文件的写入操作,都应该用数据卷(Volume)
、或者绑定宿主目录
,这些操作会跳转存储层直接对宿主进行读写,其性能和稳定性更高,容器删除后也不会消失,容器的存储层应保持无状态。
- 容器与镜像的关系如同OOP中的类与实例一样,
-
仓库(Repository):集中存放镜像文件的地方(代码管理)
- 镜像构建完后,可以很容易的在本地宿主运行,但是如果要在其他服务器上使用镜像,我们就需要一个
集中处理、分发镜像
的服务,Docker Registry
就是这样的服务。 - 一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);
每个标签对应一个镜像
,镜像仓库是用来集中存放镜像仓库的地方,类似与代码仓库。 - 通常一个仓库会包含同一软件不同版本的镜像,
标签通常就对应软件的各个版本
,可以通过<仓库名>:<标签>
来指定哪个版本的镜像,没有指定标签的话就默认latest
。 - 常见的镜像仓库服务:
- https://hub.docker.com/
- 时速云:https://hub.tenxcloud.com/
- 网易云:https://www.163yun.com/product/repo
- 阿里云:https://www.aliyun.com/product/containerservice?utm_content=se_1292836
- 镜像构建完后,可以很容易的在本地宿主运行,但是如果要在其他服务器上使用镜像,我们就需要一个
四、Build、Ship、Run
Docker的运行过程:
- Docker将镜像仓库的镜像拉取到本地,从而运行为一个个容器,故Docker常被称为码头工人,主要包括以下三步:
- Build(构建镜像):镜像就像集装箱,包括运行环境、文件、资源等
- Ship(运输镜像):主机和仓库间运行,仓库就如同超级码头
- Run(运行镜像):运行的镜像就是容器,容器是程序运行的地方