跳到主要内容

Docker 教程

欢迎学习 Docker!本教程将带你从零基础开始,逐步掌握 Docker 容器技术的核心知识和技能。

什么是 Docker?

Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵从 Apache2.0 协议开源。它可以让开发者将应用程序及其依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux、Windows 或 macOS 机器上,也可以实现虚拟化。

Docker 的核心概念

容器(Container):容器是一个轻量级、独立的可执行软件包,包含运行应用程序所需的所有内容:代码、运行时、系统工具、系统库和设置。容器之间相互隔离,确保应用程序在不同环境中以相同方式运行。

镜像(Image):镜像是容器的蓝图,是一个只读模板,包含创建容器所需的指令。镜像由多个层组成,每层代表 Dockerfile 中的一条指令。

仓库(Registry):仓库是存储和分发镜像的地方。Docker Hub 是最大的公共仓库,包含超过 100,000 个镜像。你也可以搭建私有仓库来存储自己的镜像。

Docker 与虚拟机的区别

特性Docker 容器虚拟机
启动速度秒级分钟级
资源占用MB 级别GB 级别
性能接近原生有损耗
隔离性进程级别操作系统级别
操作系统共享宿主机内核独立内核

架构对比:

┌─────────────────────────────────────────┐
│ 虚拟机架构 │
├─────────────────────────────────────────┤
│ App A │ App B │ App C │ │
│ Bins/Libs│ Bins/Libs│ Bins/Libs│ │
│ Guest OS │ Guest OS │ Guest OS │ │
├─────────┼─────────┼─────────┤ │
│ Hypervisor │
├─────────────────────────────────────────┤
│ Host OS │
├─────────────────────────────────────────┤
│ 物理服务器 │
└─────────────────────────────────────────┘

┌─────────────────────────────────────────┐
│ Docker 架构 │
├─────────────────────────────────────────┤
│ App A │ App B │ App C │ │
│ Bins/Libs│ Bins/Libs│ Bins/Libs│ │
├─────────┼─────────┼─────────┤ │
│ Docker Engine │
├─────────────────────────────────────────┤
│ Host OS │
├─────────────────────────────────────────┤
│ 物理服务器 │
└─────────────────────────────────────────┘

解释

  • 虚拟机需要为每个应用运行完整的操作系统,资源开销大
  • Docker 容器共享宿主机内核,只打包应用和依赖,更加轻量

为什么学习 Docker?

  1. 一致性环境:开发、测试、生产环境完全一致,消除"在我机器上能运行"的问题
  2. 快速部署:容器启动只需几秒,大大加快部署速度
  3. 资源高效:相比虚拟机,容器占用资源更少,可以在同一硬件上运行更多服务
  4. 微服务架构:容器是微服务架构的理想载体,每个服务独立部署和扩展
  5. DevOps 实践:Docker 是 CI/CD 流程的核心组件,实现自动化构建和部署
  6. 云原生基础:Kubernetes 等容器编排工具都基于 Docker 容器

Docker 的应用场景

应用部署

  • 标准化应用交付流程
  • 一键部署复杂应用栈
  • 版本回滚和灰度发布

开发环境

  • 统一团队开发环境
  • 快速搭建本地开发栈
  • 隔离不同项目的依赖

持续集成/持续部署

  • 构建可重复的 CI 环境
  • 自动化测试环境
  • 流水线标准化

微服务架构

  • 服务独立部署和扩展
  • 服务隔离和资源限制
  • 服务网格基础

云原生应用

  • Kubernetes 基础设施
  • 云平台部署标准
  • 混合云和多云部署

Docker 核心组件

Docker Engine(Docker 引擎)

Docker 引擎是一个客户端-服务器应用程序,包含以下组件:

  • Docker Daemon(dockerd):守护进程,负责构建、运行和分发容器
  • REST API:用于程序与守护进程通信的接口
  • Docker CLI(docker):命令行界面,用于管理容器和镜像
┌─────────────────────────────────────────┐
│ Docker Engine │
├─────────────────────────────────────────┤
│ Docker CLI │
│ (docker 命令) │
├─────────────────────────────────────────┤
│ REST API │
├─────────────────────────────────────────┤
│ Docker Daemon │
│ (dockerd) │
├─────────────────────────────────────────┤
│ containerd │
│ runc │
└─────────────────────────────────────────┘

Docker Desktop

Docker Desktop 是 Docker 官方提供的桌面应用程序,包含:

  • Docker Engine
  • Docker CLI
  • Docker Compose
  • Kubernetes(可选)
  • 图形化管理界面

Docker 生态系统

Docker Hub

Docker Hub 是 Docker 官方提供的公共镜像仓库:

  • 超过 100,000 个公共镜像
  • 官方镜像(如 nginx、redis、mysql)
  • 自动构建功能
  • 镜像扫描和安全检查

Docker Compose

Docker Compose 是用于定义和运行多容器应用的工具:

  • 使用 YAML 文件定义服务
  • 一键启动多个容器
  • 管理容器之间的依赖关系

Docker Swarm

Docker Swarm 是 Docker 原生的集群管理工具:

  • 将多个 Docker 主机组成集群
  • 服务发现和负载均衡
  • 滚动更新和回滚

教程目录

基础阶段

进阶阶段

高级主题

知识速查

学习建议

  1. 动手实践:每学一个概念,都要动手操作验证
  2. 理解原理:不只是记住命令,要理解底层原理
  3. 循序渐进:从基础命令开始,逐步掌握高级功能
  4. 阅读官方文档:Docker 官方文档是最权威的参考
  5. 项目练习:将实际项目容器化是最好的学习方式

参考资源

准备好开始学习了吗?点击下一章开始你的 Docker 学习之旅!