# Docker

Docker - 从入门到实践 (opens new window)

Docker 是一种虚拟化容器技术,首先我们需要了解一下虚拟机容器的区别。

  • 虚拟机技术是虚拟出一套硬件资源后,在其上运行一个完成操作系统,在该系统上再运行所需应用进程。
  • 容器共享同一个 Host OS,容器内应用直接使用宿主机内核,这使得容器在体积上要比虚拟机小很多,并且部署和启动速度更快,开销更小,也更容易迁移。

# 为什么需要 Docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

  • 持续部署与测试的一致性:Docker 能够保持容器内部所有的配置和依赖关系始终不变。你可以从开发 到产品发布的整个过程中使用相同的容器来确保没有任何差异或者人工干预。
  • 多云平台兼容:可移植性好。可以在任何拥有Docker runtime的环境快速部署,没有迁移的成本。
  • 环境标准化和版本控制:设想某次发布因为完成了一个组件的升级而导致你整个环境都损坏了。Docker 可以在几分钟内轻松地回滚到这个镜像的前一个版本。
  • 隔离性:Docker 可以确保你的应用程序与资源是分隔开的,例如依赖多个不同版本的 tomcat 的时候,不会因为依赖冲突导致崩溃。同时 Docker 还能确保每个容器只使用分配给它的额定资源,不会因为某个进程影hang 住其他容器。
  • 安全性:由于Docker容器是隔离的,并且资源是受限制的,所以即使你其中一个应用程序被黑,也不会影响运行在其它Docker容器上的应用程序。

# 基本概念

# 镜像

我们都知道,操作系统分为 内核用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

# 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间 (opens new window)。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。

# 仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库Repository);每个仓库可以包含多个 标签Tag);每个标签对应一个镜像。

# Docker 操作

待补充

最后更新时间: 9/8/2022, 4:24:45 PM