Skip to content

Docker 简介

什么是 Docker?

Docker 是一个开源的容器化平台,它使用操作系统级虚拟化技术,让开发者能够将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中。这个容器可以在任何支持 Docker 的环境中运行,确保应用程序在不同环境中的一致性。

容器技术的发展历程

传统部署方式的问题

在容器技术出现之前,应用程序部署面临诸多挑战:

  1. 环境不一致:开发环境、测试环境、生产环境的差异导致"在我机器上能跑"的问题
  2. 资源浪费:传统虚拟机需要完整的操作系统,占用大量资源
  3. 部署复杂:需要手动配置环境、安装依赖,容易出错
  4. 扩展困难:应用扩展需要重复配置多台服务器

虚拟化技术的演进

物理机时代 → 虚拟机时代 → 容器时代
  • 物理机时代:一台服务器只能运行一个应用,资源利用率低
  • 虚拟机时代:通过 Hypervisor 在一台物理机上运行多个虚拟机
  • 容器时代:共享操作系统内核,更轻量级的虚拟化方案

Docker 的核心概念

1. 容器 (Container)

容器是 Docker 的基本运行单位,它是一个轻量级、独立的可执行包,包含运行应用程序所需的一切:

  • 应用程序代码
  • 运行时环境
  • 系统工具
  • 系统库
  • 配置文件

2. 镜像 (Image)

镜像是创建容器的模板,它是一个只读的文件系统快照,包含:

  • 应用程序及其依赖
  • 环境配置
  • 启动命令

3. 仓库 (Repository)

仓库是存储和分发镜像的地方:

  • Docker Hub:官方公共仓库
  • 私有仓库:企业内部使用
  • 第三方仓库:如阿里云、腾讯云等

Docker 的核心优势

1. 一致性 (Consistency)

bash
# 开发环境
docker run myapp:latest

# 测试环境  
docker run myapp:latest

# 生产环境
docker run myapp:latest

无论在哪个环境,应用程序的行为都完全一致。

2. 轻量级 (Lightweight)

特性虚拟机Docker 容器
启动时间分钟级秒级
资源占用GB 级MB 级
性能损耗5-20%接近原生

3. 可移植性 (Portability)

容器可以在以下环境中无缝运行:

  • 开发者笔记本
  • 测试服务器
  • 云平台(AWS、Azure、GCP)
  • 本地数据中心

4. 可扩展性 (Scalability)

bash
# 快速扩展到 5 个实例
docker service scale myapp=5

# 根据负载自动扩展
docker service update --replicas 10 myapp

Docker 架构

客户端-服务器架构

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Docker    │    │   Docker    │    │   Docker    │
│   Client    │◄──►│   Daemon    │◄──►│  Registry   │
│             │    │             │    │             │
└─────────────┘    └─────────────┘    └─────────────┘

核心组件

  1. Docker Client:用户与 Docker 交互的命令行工具
  2. Docker Daemon:Docker 的后台服务,管理容器、镜像、网络等
  3. Docker Registry:存储和分发镜像的服务

Docker vs 虚拟机

架构对比

虚拟机架构:

┌─────────────────────────────────────┐
│           应用程序 A                │
├─────────────────────────────────────┤
│           客户操作系统              │
├─────────────────────────────────────┤
│            Hypervisor              │
├─────────────────────────────────────┤
│           宿主操作系统              │
├─────────────────────────────────────┤
│             物理硬件                │
└─────────────────────────────────────┘

Docker 架构:

┌─────────────────────────────────────┐
│           应用程序 A                │
├─────────────────────────────────────┤
│          Docker Engine             │
├─────────────────────────────────────┤
│           宿主操作系统              │
├─────────────────────────────────────┤
│             物理硬件                │
└─────────────────────────────────────┘

对比总结

特性虚拟机Docker 容器
隔离级别操作系统级进程级
启动速度慢(分钟)快(秒)
资源占用
安全性中等
兼容性依赖宿主内核

Docker 的应用场景

1. 应用程序打包和部署

dockerfile
# 将 Web 应用打包成镜像
FROM node:16
COPY . /app
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]

2. 微服务架构

yaml
# docker-compose.yml
version: '3'
services:
  web:
    image: myapp/web
  api:
    image: myapp/api
  database:
    image: postgres:13

3. 持续集成/持续部署 (CI/CD)

yaml
# GitHub Actions 示例
- name: Build Docker image
  run: docker build -t myapp:${{ github.sha }} .
  
- name: Deploy to production
  run: docker run -d myapp:${{ github.sha }}

4. 开发环境标准化

bash
# 开发者只需一条命令启动完整开发环境
docker-compose up -d

学习 Docker 的价值

对开发者的价值

  1. 提高开发效率:快速搭建开发环境
  2. 简化部署流程:一次构建,到处运行
  3. 增强技能竞争力:容器技术是现代开发必备技能

对企业的价值

  1. 降低运维成本:标准化的部署和管理
  2. 提高资源利用率:更高的服务器利用率
  3. 加速产品交付:更快的开发和部署周期
  4. 支持云原生架构:为微服务和云计算奠定基础

本章小结

Docker 作为容器技术的代表,彻底改变了应用程序的开发、测试和部署方式。它通过轻量级的容器技术,解决了传统部署方式中的环境不一致、资源浪费等问题。

关键要点:

  • Docker 是一个容器化平台,提供轻量级的应用程序虚拟化
  • 容器比虚拟机更轻量、启动更快、资源利用率更高
  • Docker 的核心概念包括容器、镜像和仓库
  • Docker 适用于应用打包、微服务、CI/CD 等多种场景

在下一章中,我们将学习如何在不同操作系统上安装和配置 Docker 环境。

延伸阅读

本站内容仅供学习和研究使用。