Docker学习-第二篇 基本概念与原理

一、Docker 简介

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

使用 Linux 容器部署应用程序称为容器化,而 Linux 容器是 Linux 发展出的另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

容器化越来越受欢迎,因为容器:

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:您可以即时部署更新和升级。
  • 便携式:您可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:您可以增加并自动分发容器副本。
  • 可堆叠:您可以垂直和即时堆叠服务。

Docker 就是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台,便于轻松部署应用程序。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

1. Docker 相比于传统虚拟化方式的优势与不足

优势:

  • docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。
  • docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化
  • docker 更轻量, docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境, Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高。
  • 高可用和可恢复性: docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性。
  • 快速创建、删除:虚拟化创建是分钟级别的, Docker 容器创建是秒级别的, Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
  • 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 Docker 在 Dockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署。

不足:

  • 与虚拟机相比, docker 隔离性更弱, docker 属于进程之间的隔离,虚拟机可实现系统级别隔离
  • 安全性: docker 的安全性也更弱。 Docker 的租户 root 和宿主机 root 等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户 root 权限和宿主机的 root 虚拟机权限是分离的,并且虚拟机利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击
  • 可管理性: docker 的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter 提供完备的虚拟机管理能力

2. 容器与虚拟机相比的优势

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般是几十个

二、可以使用Docker做什么?

快速,一致地交付您的应用程序

Docker 允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和持续交付( CI / CD )工作流程。

请考虑以下示例场景:

开发人员在本地编写代码并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将他们的应用程序推入测试环境并执行自动和手动测试。
当开发人员发现错误时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中以进行测试和验证。
测试完成后,打补丁就只需将更新的镜像推送到生产环境。

响应式部署和扩展

Docker 基于容器平台的特质使其支持应用的高度可移植化。Docker 容器可以在开发人员的本地笔记本电脑,数据中心的物理或虚拟机,云提供商或混合环境中运行。

Docker 的可移植性和轻量级特性还使其可以轻松地动态管理应用单元,按照业务需求即时扩展或拆除应用程序和服务。

在同一硬件上运行更多应用单元

Docker 轻巧而快速。它为基于管理程序的虚拟机提供了一种可行且经济高效的替代方案,因此您可以使用更多的计算容量来实现业务目标。Docker 非常适合高密度环境以及需要用更少资源完成更多工作的中小型部署。

三、Docker 架构

Docker 使用客户端 - 服务器( C/S )架构。 Docker 客户端与 Docker 守护进程通信,后者负责构建,运行和分发 Docker 容器。 Docker 客户端和守护程序可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护程序。 Docker 客户端和守护程序使用 REST API 通过 UNIX 套接字或网络接口进行通信。

在这里插入图片描述

1. Docker Client

Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与 Docker_Host 进行交互。最常用的 Docker 客户端就是 docker 命令,我们可以通过 docker 命令很方便地在 host 上构建和运行 Docker 容器。

2. Docker Daemon

Docker Daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,也称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过 Docker Daemon 内部的一个路由分发调度,由具体的函数来执行请求。

3. Docker Registries

Docker Registries 是存储 Docker 镜像的仓库。Docker Hub 是任何人都可以使用的公共注册中心,Docker 配置为默认在 Docker Hub 上查找镜像。Docker 支持运行私有仓库。

使用 docker pulldocker run命令时,将从配置的仓库中提取所需的镜像。使用 docker push命令时,镜像将被上传到配置的仓库中。

4. Docker Objects

Images(镜像)

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

镜像有多种生成方法:

  • 从无到有开始创建镜像
  • 下载并使用别人创建好的现有镜像
  • 在现有镜像上创建新的镜像

Containers(容器)

Docker 容器是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的对象。 Docker Container 提供了系统硬件环境,我们可以使用 Docker Images 这些制作好的系统盘,再加上我们所编写好的项目代码,通过 run 命令就可以提供服务。

Services(服务)

服务允许跨多个 Docker 守护程序扩展容器,这些守护程序一起作为具有多个管理器和工作程序的群组一起工作。每个成员都是Docker守护程序,进程间使用 Docker API 进行通信。服务允许定义所需的状态,例如在任何给定时间必须可用的服务的副本数。默认情况下,服务在所有工作节点之间进行负载均衡。

发布了40 篇原创文章 · 获赞 25 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/yym373872996/article/details/105677983
今日推荐