解决的问题
不同的机器有不同的操作系统,库和组件。把一个应用部署到多台机器上需要大量环境配置的操作
- 主要就是实现隔离性。但是比虚拟机的隔离性好很多
- 主要解决的问题
- 硬件性能过剩。在很多时候硬件处于闲置状态
- 软件冲突
- 但是在上面的情况下,如果使用多台电脑成本很高,所以在硬件机能过剩的情况下,硬件虚拟化的普及就提出来了
1 | 绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。 |
Docker是对Linux容器(Linux Containers)的一种封装
docker解决的就是环境配置的问题。
- 对进程隔离,被隔离的进程独立于宿主系统或者其他隔离进程
- 可以不修改程序代码,不需要学习特定环境的技术,就能实现应用程序部署在机器上
用途
- 提供一次性的环境。
- 本地测试他人软件
- 持续集成时,提供单元测试和构建环境
- 持续集成指不断的将代码集成到主干上,这样能更快的发现错误
- 因为使用的时候可以隔离,随意不会对其他的产生影响
- 提供弹性的云服务:因为可以随开随关
- 组件微服务架构:
- 可以在本机模拟出服务器架构
与虚拟机的比较
虚拟机是通过模拟硬件,在硬件上安装操作系统从而实现的
启动速度
- 虚拟机需要先启动虚拟机的操作系统,再启动应用
- docker相当于直接启动一个进程,速度快
占用资源
- 一台机器只能开十几个虚拟机,是一个完整的操作系统,需要占用大量的磁盘,内存和CPU
- docker只需要相关应用和组件,一台机器可以开成千上万个
优势
- 容易迁移:打包好的应用在不同的机器上迁移
- 容易维护:分层和镜像,可以容易复用重复的部分。
- 容易扩展:可以使用基础镜像扩展得到新的镜像
镜像(imgae)和容器
镜像是一种静态的结构,可以看成OOP里面的类。容器是镜像的一个instance
镜像包含容器运行时候需要的代码以及组件,是一个分层结构,每一层都是只读的。构建镜像的时候会一层一层的创建,前一层是后一层的基础
构建容器的时候,可以在镜像里增加writeable layer,从而保存容器在运行过程中的修改
容器文件
- 生成容器后,会存在容器文件和image文件。关闭容器不会删除容器文件
- 如果要完全终止,可以删除容器文件
image文件
- docker把应用程序以及他的依赖,打包在image文件里。经过这个文件才能生成docker容器,docker根据这个文件生成容器的实例。
- image是二进制文件,实际开发中,image文件一般都会继承另一个image文件,再加上一些个性化设置(image文件是通用的)
- 制作完成后,文件可以上传网上仓库,比如DockerHub