Docker简介

什么是Docker

Docker是一款用go语言编写的,用于开发、部署和运行应用程序的开源平台。

为什么需要Docker

当开发者开发完了一个应用程序的时候,就需要将其部署到生产环境中,这个时候需要涉及到涉及到在生产环境中安装指定的框架、第三方库,设置环境变量等等。而如果这个应用需要部署到多个生产环境中,就意味着我们需要手动进行多次的环境部署操作,而且更麻烦的是,一旦应用升级,使用到的这些框架、库或者环境变量有更改,那么我们就需要手动在多个生产环境下进行更改和升级。
Docker的出现改变了这一局面,它允许开发者将应用以及应用所需的运行环境打包成一个容器镜像(image),将这个镜像分发到生产环境中运行,Docker就会启动一个容器(container)来运行该应用,这个容器里面已经包含了该应用程序运行时所需的所有环境。
从此,开发者只需要在开发环境下将程序开发完毕,然后把运行环境配置好,打包成一个镜像,部署应用的时候只需要将镜像分发到生产环境中运行即可,无需重复部署运行环境。

Docker的架构

Docker简介_第1张图片
docker大致可以分为三个部分:

  • docker client

    docker和用户交互的前端,负责接受用户输入的命令并发送给docker daemon执行,然后返回docker daemon的执行结果。

  • docker daemon

    一个名为dockerd的守护进程,负责监听并执行docker API的请求,主要会管理镜像、容器、网络(network)和卷(volume)等资源。

  • docker registry

    存储着许多容器镜像的仓库。默认情况下,Docker会在Docker Hub上查找镜像。你甚至可以建立自己私人的docker registry。

    镜像(image)

  • 镜像是一个只读的模版,里面存储了一系列用于构建一个Docker容器的指令。
  • Docker使用Dockerfile来构建一个镜像。
  • 在Dockerfile中的每条指令都会创建出一个层(layer)并保存在镜像中。
  • 当开发者更新Dockerfile并重新生成镜像的时候,Docker只会更改需要更改的layer。
  • 一般来说,创建一个新的镜像往往需要基于一个已有的镜像,比如说我现在要部署一个web应用的镜像,那么我可能会先请求一个ubuntu的image,然后再在这个ubuntu的image上面安装Apache、安装应用和配置环境等等。

    容器(container)

  • 容器和镜像的关系有点像对象和类的关系,也就是说,容器是镜像的实例化。
  • 可以在同一台机器上运行多个容器,默认情况下多个容器之间是互不干扰,相互隔离的。当然,也可以自己配置容器之间的隔离和共享的资源。
  • 当一个容器在运行时被修改了,那么这些修改如果不是在持久化的存储介质中进行的,那么当容器退出的时候,这些修改将不会被保存下来。
  • 容器有点像虚拟机,但是二者的原理有着本质的区别:虚拟机需要模拟出一整个操作系统,然后再在模拟出的操作系统上部署应用和库,多个虚拟机之间的操作系统是独立的;而容器是通过namespace和cgroup等机制实现的隔离,多个容器之间是共享操作系统内核的。因此,容器会比虚拟机更加轻量化和可移植,但是同时隔离性和安全性也就更差。
    Docker简介_第2张图片

    参考

    https://docs.docker.com/get-started/overview/

你可能感兴趣的:(docker)