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,开发人员可以方便地共享和管理自己的镜像资源。

相关推荐
摇滚侠36 分钟前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
程序员小凯3 小时前
Spring Boot测试框架详解
java·spring boot·后端
你的人类朋友4 小时前
什么是断言?
前端·后端·安全
程序员小凯5 小时前
Spring Boot缓存机制详解
spring boot·后端·缓存
yannan201903135 小时前
Docker容器
运维·docker·容器
i学长的猫5 小时前
Ruby on Rails 从0 开始入门到进阶到高级 - 10分钟速通版
后端·ruby on rails·ruby
用户21411832636025 小时前
别再为 Claude 付费!Codex + 免费模型 + cc-switch,多场景 AI 编程全搞定
后端
茯苓gao6 小时前
Django网站开发记录(一)配置Mniconda,Python虚拟环境,配置Django
后端·python·django
小宁爱Python6 小时前
Windows Docker Desktop占用C盘空间过大解决办法集合
运维·docker·容器
Cherry Zack6 小时前
Django视图进阶:快捷函数、装饰器与请求响应
后端·python·django