Docker1️⃣引入

容器:一套互相隔离的进程集合,具有独立运行环境和资源。

1、引入

部署微服务应用时,存在依赖兼容、环境差异等问题。

1.1、依赖兼容

微服务应用组件非常多,且各个应用的依赖关系复杂,甚至会互相冲突。

  • 传统方式

    1. 开发者打包应用程序(如 war 包),将 war 包发送给测试人员。
    2. 测试人员需要根据应用程序,安装相应的(应用)函数库依赖并进行配置
    3. 同理,运维人员也需要进行相同的重复操作,且容易出错。
  • Docker

    1. 开发者将应用程序及函数库、依赖、配置一起打包,作为一个镜像
    2. 测试人员、运维人员只需启动镜像,无需安装函数库、依赖等。
    3. Docker 会在镜像启动时形成隔离环境,避免互相干扰。

1.2、环境差异

以上解决了多个应用的依赖兼容问题

还有一个问题:开发、测试、生产环境存在差异

1.2.1、OS 结构

Linux 发行版 = Linux 内核 + 系统应用

  • 计算机硬件:如 CPU、内存、磁盘等。

  • 内核:对外提供内核指令,与计算机硬件交互。

  • 系统应用:提供函数库,其中封装了内核指令。

    image-20210731144304990

1.2.2、兼容问题

以 MySQL 应用为例,模拟开发和测试环境不同的情景。

  • 传统

    1. 开发者(Ubuntu 系统)打包 MySQL 镜像,发送给测试人员(CentOS 系统)
    2. 测试人员启动 MySQL 镜像时,MySQL 会尝试调用 Ubuntu 函数库,但匹配不到对应的函数(报错)。
  • Docker:将系统函数库一同打包到镜像中,可迁移到任意 Linux 系统上运行。

    【注意区分:应用函数库(如 Java 类库),系统函数库(操作系统相关)】

2、Docker

image-20220530152955417

  • Docker 是一个开源容器化技术,用于构建和容器化应用程序(对进程进行封装隔离并自动部署)
  • 诞生于2013 年初,基于 GoLang 实现,dotCloud 公司出品(后改名为 Docker Inc)
  • 自 17.03 版本起,分为社区版(Docker CE),企业版(Docker EE)。
  • Docker 实现了镜像、容器等机制。
  • ...

2.1、常见概念

2.1.1、镜像和容器

镜像(Image) 容器(Container)
定义 应用程序及其所需依赖、函数库、配置等文件打包在一起形成的文件包 Docker 将镜像中的应用程序、函数等加载到内存中运行所形成的进程。Docker 会给容器进程做隔离,对外不可见
组成 应用程序 + 依赖 + 函数库 + 配置
(包括应用函数库、部分系统函数库)
运行的镜像 + 隔离
特点 只读 沙箱机制
  1. 镜像可以迁移到任何 Linux 操作系统上运行。
  2. 通过一行命令完成容器启动、移除,方便快捷,性能开销极低。
  3. 一个镜像可以启动多次,形成多个容器进程。 (可理解为 Java 类与对象的关系)

2.1.2、仓库

  • Repository:可看作一个代码控制中心,用来保存镜像。

  • Docker Registry:开发者会将自己的镜像打包并发布到 Docker Registry,包含多个仓库。

2.2、Docker 架构

C/S 架构

  • 服务端(server):Docker 守护进程(dockerd)负责处理 Docker 指令,管理镜像、容器等。

  • 客户端(client):通过(本地)命令或(远程)RestAPI,向 Docker 服务端发送指令。

    image-20210731154257653

2.3、与虚拟机的区别

虚拟机 Docker
说明 在操作系统(物理机)中模拟硬件设备,运行另一个操作系统(虚拟机) 封装函数库,没有模拟完整的操作系统
本质 操作系统中的操作系统 操作系统中的系统进程
性能 较差 接近原生
硬盘占用 GB 级别 MB 级别
启动 分钟级 秒级
图示 image-20220530162914354 image-20220530162904260

2.4、Docker 安装

CentOS 7 安装 Docker

posted @ 2022-05-30 17:29  Jaywee  阅读(23)  评论(0编辑  收藏  举报

👇