Docker 简介

Docker 简介

Docker 是一个开源的应用容器引擎,它利用操作系统级的虚拟化技术(如Linux上的命名空间和控制组)来创建和管理轻量级的、可移植的软件容器。这些容器能够在不同的主机之间无缝运行,并且具备一致的行为,因为它们包含了应用运行所需的所有依赖库、配置文件和服务。

Docker 的主要优势在于:

  1. 标准化交付:通过 Docker 镜像,开发者可以打包应用程序及其所有依赖项为单一单元,确保在任何支持 Docker 的环境上都能以一致的方式运行。

  2. 资源隔离与效率:每个 Docker 容器都是相互隔离的,拥有自己的文件系统、网络接口和进程空间,但相比于传统的虚拟机更为轻量高效,因为它共享宿主机的操作系统内核,避免了冗余的硬件虚拟化开销。

  3. 快速部署与扩展:由于容器启动速度快,因此能够实现快速的服务部署、扩展和更新,非常适合微服务架构以及持续集成/持续部署(CI/CD)的工作流。

  4. 跨平台兼容:Docker 可以在多种 Linux 发行版以及 Windows 和 macOS 上运行,使得开发和生产环境的一致性得到显著提高。

  5. 生态系统的丰富:围绕 Docker 构建了一个庞大的生态系统,包括公共和私有镜像仓库(如 Docker Hub)、编排工具(如 Kubernetes 和 Swarm)、自动化构建工具(如 Dockerfile 和 Docker Compose)等。

Container(容器)与 VM(虚拟机)的对比

  1. 定义:
  • Container(容器):是一种轻量级的、操作系统级别的虚拟化技术。容器共享宿主机的操作系统内核,通过命名空间、控制组等机制实现资源隔离和限制,每个容器包含独立的应用程序及其依赖库,但不包括操作系统的完整副本。

  • VM(虚拟机):是硬件层面的虚拟化技术。在宿主机上运行一个完整的操作系统实例,每个虚拟机都有自己的内核以及用户空间,模拟了完整的硬件环境。

  1. 资源使用效率:
  • 容器:因为只运行单一应用程序并共享内核,所以容器占用的存储空间小,启动速度快,内存和CPU利用率更高。

  • 虚拟机:由于运行的是完整的操作系统,所以占用的存储空间较大,启动速度相对较慢,对资源的消耗也更多。

  1. 隔离性:
  • 容器:提供进程级别的隔离,安全性相对较低,适合在同一信任域内的多应用部署。

  • 虚拟机:提供更高级别的隔离,每个虚拟机内部都是一个独立的世界,安全性较高,可以容纳不同版本或类型的操作系统。

  1. 迁移性和可移植性:
  • 容器:具有极高的可移植性,只要目标环境支持相应的容器运行时,容器就能快速迁移到新环境且行为一致。

  • 虚拟机:虽然可移植性较好,但由于包含整个操作系统,因此其体积大,迁移所需时间较长。

  1. 应用场景:
  • 容器:适用于微服务架构、持续集成/持续部署(CI/CD)、快速迭代开发及测试环境搭建等场景。

  • 虚拟机:更适合于需要更强隔离性的场景,如云服务器租赁、多租户环境下的资源隔离、跨平台兼容性测试等。

总结来说,容器侧重于高效利用资源、简化运维流程、加快部署速度,而虚拟机则强调高度隔离和兼容性。

Docker的虚拟化

传统VM的虚拟化

Docker 核心组件

主要包含三部分:

1. Docker Image

Docker Image 是 Docker 容器技术的核心组成部分,它是一个静态的、只读的模板,包含了运行一个应用程序所需的所有内容,包括代码、运行时库、环境变量和配置文件等。每个 Docker Image 都是基于上层镜像通过层层叠加的方式构建而成,并且每一层都是只读的。

Docker Image 的构建通常使用 Dockerfile 文件来定义,其中包含了创建镜像的具体步骤和依赖项。通过执行 docker build 命令,Docker 会根据 Dockerfile 中的指令逐步构建新的镜像层,最终生成一个新的 Docker Image。

每个 Docker Image 都有一个唯一的标识符(通常是哈希值),并可以被赋予一个标签(tag),例如:ubuntu:latestmyapp:v1.0,便于管理和引用。

当需要运行一个容器时,用户会基于某个 Docker Image 创建一个新的容器实例。由于镜像是只读的,因此在启动容器时,Docker 会在镜像的基础上添加一个可写的容器层,这样既保留了原镜像的不变性,又允许在容器内进行临时数据写入和应用状态变更。

2. Docker Container (容器)

Docker Container(容器)是 Docker 技术的核心运行时实体,它是基于 Docker Image 创建的一个轻量级、独立的运行环境。容器提供了一种标准化的方式来打包和运行应用程序及其依赖,确保在任何支持 Docker 的环境中都能以一致的方式运行。

当您从一个 Docker Image 启动一个容器时,实际上是在系统上创建了一个与宿主机隔离的进程空间,并且这个空间内包含了运行应用所需的所有资源:代码、运行时库、配置文件以及一个精简版的操作系统内核(通常称为容器运行时)。尽管容器之间看起来像是各自运行在独立的操作系统中,但它们实际上共享宿主机的内核,从而实现了高效、轻量级的虚拟化。

3. Docker Registry (仓库)

Docker Registry 用于存储和分发 Docker 镜像,有公共和私有两种形式。公共的如 Docker Hub,私有的可以部署在本地或云端。开发人员可以将构建好的镜像推送到 Registry,然后在其他环境中从 Registry 拉取镜像,以便在多个环境中保持一致性和便利性。

Docker 架构

Docker使用client-server 架构。组成包含 Docker ClientDocker DaemonDocker Registry

  • Docker Client(客户端):Docker 客户端是用户与 Docker 系统进行交互的主要工具。它提供了命令行界面(CLI),允许用户执行如构建镜像、运行容器、管理网络、存储卷等操作。客户端通过发送 API 请求给 Docker Daemon 进行通信。

  • Docker Daemon(守护进程):Docker Daemon 是在宿主机上运行的一个长生命周期的服务程序,负责接收并处理来自 Docker 客户端的请求,并执行相应的操作。守护进程管理着所有容器的生命周期,包括从镜像创建容器、启动/停止容器、分配资源、监控状态等。

  • Docker Registry(仓库):它负责管理和存储用户上传的 Docker Image,并提供镜像的下载、搜索等功能。通过 Docker Registry,开发人员可以方便地共享和管理自己的镜像资源。

相关推荐
码农小野16 分钟前
基于SpringBoot的自习室预订系统
java·spring boot·后端
ac-er88881 小时前
如何在Flask中实现国际化和本地化
后端·python·flask
Adolf_19931 小时前
Flask-WTF的使用
后端·python·flask
Richardlygo3 小时前
(k8s)kubernetes集群基于Containerd部署
云原生·容器·kubernetes
小小的木头人4 小时前
Docker vs. containerd 深度剖析容器运行时
运维·docker·容器
林太白5 小时前
❤Node09-用户信息token认证
数据库·后端·mysql·node.js
weixin_443290695 小时前
【Docker】安装及使用
docker·容器·eureka
骆晨学长5 小时前
基于Springboot的助学金管理系统设计与实现
java·spring boot·后端
蒙娜丽宁6 小时前
深入理解Go语言中的接口定义与使用
开发语言·后端·golang·go
二进制杯莫停6 小时前
k8s pod网络故障注入,命令行实现
网络·容器·kubernetes