关于docker

解决的问题

不同的机器有不同的操作系统,库和组件。把一个应用部署到多台机器上需要大量环境配置的操作

  • 主要就是实现隔离性。但是比虚拟机的隔离性好很多
  • 主要解决的问题
    • 硬件性能过剩。在很多时候硬件处于闲置状态
    • 软件冲突
  • 但是在上面的情况下,如果使用多台电脑成本很高,所以在硬件机能过剩的情况下,硬件虚拟化的普及就提出来了
1
2
绝大部分应用,开发者都可以通过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