【Docker】快速入门指南

简介

Docker 是一个开源的容器化平台,用于构建、部署和管理应用程序。它通过容器技术将应用程序及其依赖项打包成标准化单元,确保在不同环境中运行的一致性。

Docker 官网
Docker 中文社区
Docker Hub
Docker 汉化包
Windows Subsystem for Linux 文档

核心概念

从最基础的元素开始,理解 Docker 的构成单元:

  1. Docker 镜像 (image)

    轻量级、只读的软件包,包含运行应用所需的代码、运行时、库、环境变量和配置文件。镜像由多层文件系统组成,支持分层复用和增量更新。

  2. Docker 容器 (container)

    镜像的运行实例,拥有独立的进程空间、网络和文件系统。容器在镜像层之上添加一个可写层,生命周期独立,可随时启动、停止或删除。

  3. Docker 数据卷 (volume)

    一种专门用于持久化数据的 Docker 对象,独立于容器的生命周期。它提供:

  • 数据持久化:容器删除后数据依然保留
  • 数据共享:多个容器可挂载同一数据卷,实现数据交换
  • 与宿主机解耦:数据由 Docker 管理,便于备份和迁移
  1. Dockerfile
    文本文件,通过一系列指令(如 FROM、RUN、COPY)定义如何构建镜像。
javascript 复制代码
# 示例:基于 Nginx 镜像构建自定义镜像
FROM nginx:alpine
COPY ./html /usr/share/nginx/html
EXPOSE 80
  1. Docker Hub

    公共镜像仓库,用于共享和分发镜像。也可搭建私有 Registry(如 Docker Registry、Harbor)管理内部镜像。

  2. Docker 引擎

    C/S 架构中的服务端(守护进程),负责创建和管理容器、镜像、网络等。它是 Docker 的核心运行环境。

Docker 的优势

  • 轻量高效:容器共享主机操作系统内核,资源占用远低于虚拟机
  • 跨平台:支持 Linux、Windows 和 macOS,实现"一次构建,随处运行"
  • 快速部署:秒级启动容器,提升开发和运维效率
  • 隔离性:每个容器独立运行,通过 Namespace 和 Cgroup 实现进程、网络、文件系统的隔离,避免环境冲突
  • 版本控制与分层存储:Dockerfile 和镜像可纳入 Git 管理,实现基础设施即代码;镜像分层复用公共层,节省磁盘和网络传输时间
  • 生态丰富:与 CI/CD 工具(Jenkins、GitLab CI)、编排工具(Kubernetes、Docker Swarm)无缝集成

应用场景

  • 微服务架构:将复杂应用拆分为多个独立服务,每个服务打包为容器,独立开发、部署和扩展(如订单、支付、用户服务
  • 持续集成/交付 (CI/CD):在 Jenkins 或 GitLab CI 中通过 Docker 构建、测试和发布应用,保证开发、测试、生产环境一致性
  • 开发环境标准化:团队共享同一 Docker 镜像,消除"在我机器上能运行"的问题,新人加入可秒级搭建开发环境
  • 快速原型与测试:利用容器快速启动服务(如数据库、消息队列),方便功能验证和集成测试
  • 混合云/多云部署:容器镜像不受底层基础设施限制,可在不同云平台或本地数据中心间灵活迁移

核心架构

Docker 采用 客户端-服务器(C/S)架构

  1. Docker 客户端

    通过 docker 命令行工具或直接调用 REST API 与 Docker 守护进程通信。

  2. Docker 守护进程(dockerd)

    核心后台进程,负责管理镜像、容器、网络、数据卷等;

    接收客户端请求,并通过 containerd 管理容器生命周期;

    与镜像仓库交互,拉取或推送镜像。

  3. containerd

    工业级容器运行时管理器,负责镜像传输、存储和容器执行控制;

    它通过 containerd-shim 为每个容器创建一个垫片进程,保持容器独立运行;

    调用底层的 runc 真正创建和运行容器。

  4. runc

    轻量级命令行工具,根据 OCI(开放容器倡议)标准直接与 Linux 内核交互,创建容器的隔离环境。

  5. 镜像仓库

    存储 Docker 镜像的远程服务,默认是 Docker Hub,也可搭建私有仓库;

    守护进程和 containerd 均可从仓库拉取镜像到本地缓存。

常用工具与生态

  • Docker Compose:通过 YAML 文件定义和运行多容器应用(如 Web 服务 + 数据库 + 缓存),适合本地开发和测试
javascript 复制代码
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
  • Docker Swarm:Docker 原生的容器编排工具,可将多个 Docker 主机组成集群,提供服务发现、负载均衡和伸缩能力
  • Docker Registry:用于存储和分发私有镜像,可自建(如 registry:2 镜像)或使用云服务商提供的镜像仓库
  • Kubernetes:业界主流的容器编排平台,Docker 可作为其容器运行时,与 Docker CLI 和镜像格式兼容

Docker 与虚拟机的区别

相关推荐
**蓝桉**2 小时前
prometheus监控docker容器(Rocky9)
docker·容器·prometheus
面对疾风叭!哈撒给2 小时前
Linux之Docker安装Mysql 8.0+
linux·mysql·docker
十五年专注C++开发2 小时前
Linux 下用 VS Code 高效调试
linux·运维·服务器·c++·vscode
张道宁2 小时前
基于Spring Boot与Docker的YOLOv8检测服务实战
spring boot·yolo·docker
闲猫2 小时前
Java ApacheSSHD实现SSH代理
运维·服务器·ssh
蓝队云计算2 小时前
怎么用服务器养龙虾OpenClaw?云上OpenClaw快速部署指南(小白极速版)
运维·服务器·人工智能·云服务器·openclaw
Mr_Chenph2 小时前
备份Docker
运维·docker·容器
桌面运维家2 小时前
理解 Linux Front Page:构建动态Web首页指南
linux·运维·服务器
toooooop82 小时前
linux常用命令nano和vim有啥区别
linux·运维·vim