简介

Docker,是一款现在最流行的 软件容器平台,提供了软件运行时所依赖的环境。

传统物理机及虚拟机

  • 物理机: - 硬件环境,真实的 计算机实体,包含了例如物理内存,硬盘等等硬件;

  • 虚拟机: - 在物理机上 模拟出一套硬件环境和操作系统,应用软件可以运行于其中,并且毫无感知,是一套隔离的完整环境。本质上,它只是物理机上的一份 运行文件

  • 为什么需要虚拟机?- 环境配置与迁移: - 在软件开发和运行中,环境依赖一直是一个很头疼的难题,比如你想运行 node 应用,那至少环境得安装 node 吧,而且不同版本,不同系统都会影响运行。解决的办法,就是我们的包装包中直接包含运行环境的安装,让同一份环境可以快速复制到任意一台物理机上。 - 资源利用率与隔离: - 通过硬件模拟,并包含一套完整的操作系统,应用可以独立运行在虚拟机中,与外界隔离。并且可以在同一台物理机上,开启多个不同的虚拟机启动服务,即一台服务器,提供多套服务,且资源完全相互隔离,互不影响。不仅能更好提高资源利用率率,降低成本,而且也有利于服务的稳定性。

  • 传统虚拟机的缺点: - 资源占用大: - 由于虚拟机是模拟出一套 完整系统,包含众多系统级别的文件和库,运行也需要占用一部分资源,单单启动一个空的虚拟机,可能就要占用 100+MB 的内存了。 - 启动缓慢: - 同样是由于完整系统,在启动过程中就需要运行各种系统应用和步骤,也就是跟我们平时启动电脑一样的耗时。 - 冗余步骤多: - 系统有许多内置的系统操作,例如用户登录,系统检查等等,有些场景其实我们要的只是一个隔离的环境,其实也就是说,虚拟机对部分需求痛点来说,其实是有点过重的。

Linux 容器

  • Linux 中的一项虚拟化技术,称为 Linux 容器技术(LXC)。
  • 它在 进程层面 模拟出一套隔离的环境配置,但并没有模拟硬件和完整的操作系统。因此它完全规避了传统虚拟机的缺点,在启动速度,资源利用上远远优于虚拟机;

Docker 就是基于 Linux 容器的一种上层封装,提供了更为简单易用的 API 用于操作 Docker,属于一种 容器解决方案

概念

在 Docker 中,有三个核心的概念:

镜像 (Image)

  • 从原理上说,镜像属于一种 root 文件系统,包含了一些系统文件和环境配置等,可以将其理解成一套 最小操作系统。为了让镜像轻量化和可移植,Docker 采用了 Union FS 的分层存储模式。将文件系统分成一层一层的结构,逐步从底层往上层构建,每层文件都可以进行继承和定制。这里从前端的角度来理解: 镜像就类似于代码中的 class,可以通过继承与上层封装进行复用
  • 从外层系统看来,一个镜像就是一个 Image 二进制文件,可以任意迁移,删除,添加;

容器 (Container)

  • 镜像是一份静态文件系统,无法进行运行时操作,就如class,如果我们不进行实例化时,便无法进行操作和使用。因此 容器可以理解成镜像的实例,即 new 镜像(),这样我们便可以创建、修改、操作容器;一旦创建后,就可以简单理解成一个轻量级的操作系统,可以在内部进行各种操作,例如运行 node 应用,拉取 git 等;
  • 基于镜像的分层结构,容器是 以镜像为基础底层,在上面封装了一层 容器的存储层; 1. 存储空间的生命周期与容器一致; 2. 该层存储层会随着容器的销毁而销毁; 3. 尽量避免往容器层写入数据;
  • 容器中的数据的持久化管理主要由两种方式: - 数据卷 (Volume): 一种可以在多个容器间共享的特殊目录,其处于容器外层,并不会随着容器销毁而删除; - 挂载主机目录: 直接将一个主机目录挂载到容器中进行写入;

仓库 (Repository)

  • 为了便于镜像的使用,Docker 提供了类似于 git 的仓库机制,在仓库中包含着各种各样版本的镜像。官方服务是 Docker Hub;
  • 可以快速地从仓库中拉取各种类型的镜像,也可以基于某些镜像进行自定义,甚至发布到仓库供社区使用;

环境安装

CentOS安装

移除旧的版本:

$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

安装一些必要的系统工具:

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:

$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

$ sudo yum makecache fast

安装 Docker-ce:

$ sudo yum -y install docker-ce

启动 Docker 后台服务

$ sudo systemctl start docker