Docker 入门:核心概念与工作原理

Docker 简介

Docker 是一个用于开发、发布和运行应用程序的开放平台。它通过容器化技术,使应用能够在不同环境中保持一致性,提高部署效率和资源利用率。

Docker 的工作方式类似于集装箱运输:

  • 传统应用部署如同货物直接装船,容易受到环境变化影响。
  • Docker 通过将应用及其依赖项封装成镜像,在不同环境中运行,确保一致性和隔离性。

Docker 核心概念

1. 镜像(Image)

镜像是一个只读的文件和文件夹组合,包含了容器运行所需的所有基础文件和配置信息。

  • 作用:是容器启动的基础,类似于操作系统的快照。
  • 特点:镜像是静态的,只读的,支持分层存储,便于分发和管理。

2. 容器(Container)

容器是镜像的运行实例,包含运行时需要的可写文件层。

  • 特点:

    • 轻量级,占用资源少,启动速度快。
    • 具有独立的命名空间隔离和资源限制,即容器内的进程无法访问主机进程、环境变量、网络等信息。
    • 运行在宿主机的内核上,而不是模拟整个操作系统。

3. 仓库(Registry)

Docker 镜像仓库类似于代码仓库,用于存储和分发 Docker 镜像。

  • 公共镜像仓库(如 Docker Hub):提供大量官方和社区维护的镜像。
  • 私有镜像仓库(如 Harbor):企业内部使用,确保数据安全。

Docker 架构

Docker 采用 C/S(客户端/服务器) 架构,主要由客户端和服务端两部分组成。

1. Docker 客户端(Client)

  • 作用:发送操作指令,与 Docker 服务端交互。

  • 交互方式:

    • 使用 docker 命令行工具。
    • 通过 REST API 直接调用。
    • 通过 Go、Java、Python、PHP 等 SDK 进行开发。

2. Docker 服务端(Server)

  • 作用:接收和处理客户端请求,管理镜像、容器、网络和存储等。

  • 核心组件:

    • dockerd:Docker 后台管理进程,处理容器生命周期管理。
    • containerd:专门负责管理容器运行,与 OCI 标准兼容。
    • runC:轻量级的容器运行工具,负责真正执行容器。

容器技术原理

Docker 依赖 Linux Namespace、Cgroups 和联合文件系统 来实现容器化。

1. Namespace(命名空间)------ 资源隔离

Namespace 提供进程级别的资源隔离,确保容器内部的进程无法访问主机资源。

  • PID Namespace:进程 ID 隔离,容器内看不到主机上的进程。
  • NET Namespace:网络隔离,每个容器可以有自己的 IP、端口等。
  • MNT Namespace:文件系统隔离,确保容器的文件结构独立。
  • IPC Namespace:进程间通信隔离,避免容器之间数据共享冲突。
  • UTS Namespace:主机名隔离,容器可以自定义主机名。

2. Cgroups(控制组)------ 资源限制

Cgroups 允许 Docker 限制容器的资源使用,如 CPU、内存、I/O 读写等。

  • 避免单个容器占用过多资源,影响其他容器和宿主机。
  • 例如,通过 docker run --memory 512m 限制容器最大使用 512MB 内存。

3. 联合文件系统(UnionFS)------ 镜像分层管理

UnionFS 允许多个文件系统分层堆叠,提高存储和构建效率。

  • 镜像层(只读):多个层叠加,避免重复存储。
  • 容器层(可写):仅记录运行时的变更,减少存储占用。
  • 主要实现方式:AUFS、OverlayFS、Devicemapper 等。

Docker 的优势

✅ 轻量级 :与虚拟机相比,占用资源更少,启动速度更快。

✅ 跨平台 :一次构建,随处运行,确保不同环境下的稳定性。

✅ 自动化部署 :结合 CI/CD,可以快速构建和发布应用。

✅ 资源隔离:不同容器之间互不影响,提高安全性和稳定性。

相关推荐
更深兼春远6 小时前
第2篇:Dify 部署保姆级教程:用 Docker跑起来
docker·容器·dify
小白的码BUG之路10 小时前
Docker -- No space left on device
运维·docker·容器
wzq11_66611 小时前
Kubernetes集群——Service篇(详细讲解!!!)
云原生·容器·kubernetes
程序员老陆11 小时前
Docker 命令全景指南:从镜像构建到生产运维
运维·docker·容器
灯澜忆梦21 小时前
【minio】#1 | 简介与安装
docker·对象存储·minio
江湖有缘1 天前
3款开源绘图工具整理合集,可Docker一键部署!
docker·容器·开源
TTATTC1 天前
告别协议选型内耗:深入拆解微服务“内部 gRPC + 边界 REST”混合通信架构与 Envoy 转码实战
docker·开源
小匠石钧知1 天前
06_在k8s集群中安装MetalLB实现LoadBalancer
云原生·容器·kubernetes·service·loadbalancer·metallb
光依旧2 天前
PageIndex没翻车,翻车的是我的解析器
docker·langchain·大模型·向量数据库·pdf解析·rag·pageindex
谢亮_vipxieliang2 天前
容器排障实战手册:从日志到内核的分层排障
docker·云原生·容器·eureka