了解docker

容器基本上是一个具有足够隔离用户空间组件的进程

Docker 基本上就是一个容器引擎,它使用 Linux 内核功能(如命名空间和控制组)在操作系统之上创建容器。

例如,如果有一个 Java jar 文件,我们可以在任何安装了 java 的服务器上运行它。同样的,一旦使用 Docker 将容器与所需的应用程序打包在一起,我们就可以在任何其他安装了 Docker 的主机上运行它。

Docker 与容器的区别

Docker 是一种为高效管理容器而开发的一种技术或工具。

我可以在没有 Docker 的情况下运行容器吗?

当然可以。我们可以使用 LXC 技术在 Linux 服务器上运行容器。

关于 Docker,我们应该要清楚:

  • Docker 不是 LXC
  • Docker 不是虚拟机解决方案。
  • Docker 不是配置管理系统,也不是chef, puppet, Ansible 等工具的替代品。
  • Docker 不是一种平台即服务的技术。

优点

Docker 有一个高效的工作流程,可以将应用程序从开发环境转移到测试环境、再转移到生产环境。当我们在实际完成将应用程序打包到 Docker 映像的一个操作时,会对它有更深的了解。

启动 docker 容器非常快速,只需不到一秒钟,而且 Docker 可以在任何具有兼容 Linux 内核的主机上运行。(也支持 Windows)

注意:我们不能在 Linux 主机上运行 Windows 容器,因为 Windows 没有 Linux 内核支持。点击此处,可以阅读有关 Windows 容器的信息。

Docker 使用写时复制联合文件系统( Copy-on-write union file system )来存储图像。每当对容器进行更改时,只会使用写时复制模型将更改写入磁盘。使用写时复制,我们优化了所有容器的共享存储层。

Docker组件

Docker 由以下几个组件组成:

  • Docker 守护进程 (dockerd)
  • Docker 客户端
  • Docker 镜像
  • Docker 注册表
  • Docker 容器

为什么容器比虚拟机好?

与虚拟机相比,容器具有一些重要优势,接下来让我们来一一看看这些优势。

资源利用和成本

  • 我们可以使用虚拟机独立运行应用程序,这里所谓的独立运行是指一台虚拟器运行一个服务。但是虚拟机仍然可能未被充分利用。此外,为应用程序调整虚拟机的大小并不是一件容易的事。
  • 另一方面,容器可以在非常小的 CPU 和内存上运行。此外,您甚至可以在 VM 内运行多个容器以进行应用程序隔离。另外,调整容器大小需要几秒钟。

配置和部署

  • 取决于所涉及的工作流,配置虚拟机并在其上部署应用程序可能需要几分钟到几小时的时间,即使回滚也需要时间。
  • 但是我们却可以在几秒钟内部署一个容器,并在几秒钟内将其回滚。

漂移管理

  • 虚拟机中的漂移管理并不容易。我们需要拥有成熟的自动化和流程,以确保所有环境都相似。遵循不可变的部署模型可避免虚拟机环境中的漂移。
  • 对于容器,一旦镜像生成,那么它在所有环境中都是一样的。要进行任何更改时,我们需要开始在 dev env 中进行更改并重新生成容器映像。

基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

镜像是静态的,容器是动态。一个镜像可以运行多个容器