Docker 简介
什么是 Docker?
Docker 是一个开源的容器化平台,它使用操作系统级虚拟化技术,让开发者能够将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中。这个容器可以在任何支持 Docker 的环境中运行,确保应用程序在不同环境中的一致性。
容器技术的发展历程
传统部署方式的问题
在容器技术出现之前,应用程序部署面临诸多挑战:
- 环境不一致:开发环境、测试环境、生产环境的差异导致"在我机器上能跑"的问题
- 资源浪费:传统虚拟机需要完整的操作系统,占用大量资源
- 部署复杂:需要手动配置环境、安装依赖,容易出错
- 扩展困难:应用扩展需要重复配置多台服务器
虚拟化技术的演进
物理机时代 → 虚拟机时代 → 容器时代- 物理机时代:一台服务器只能运行一个应用,资源利用率低
- 虚拟机时代:通过 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 myappDocker 架构
客户端-服务器架构
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Docker │ │ Docker │ │ Docker │
│ Client │◄──►│ Daemon │◄──►│ Registry │
│ │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘核心组件
- Docker Client:用户与 Docker 交互的命令行工具
- Docker Daemon:Docker 的后台服务,管理容器、镜像、网络等
- 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:133. 持续集成/持续部署 (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 的价值
对开发者的价值
- 提高开发效率:快速搭建开发环境
- 简化部署流程:一次构建,到处运行
- 增强技能竞争力:容器技术是现代开发必备技能
对企业的价值
- 降低运维成本:标准化的部署和管理
- 提高资源利用率:更高的服务器利用率
- 加速产品交付:更快的开发和部署周期
- 支持云原生架构:为微服务和云计算奠定基础
本章小结
Docker 作为容器技术的代表,彻底改变了应用程序的开发、测试和部署方式。它通过轻量级的容器技术,解决了传统部署方式中的环境不一致、资源浪费等问题。
关键要点:
- Docker 是一个容器化平台,提供轻量级的应用程序虚拟化
- 容器比虚拟机更轻量、启动更快、资源利用率更高
- Docker 的核心概念包括容器、镜像和仓库
- Docker 适用于应用打包、微服务、CI/CD 等多种场景
在下一章中,我们将学习如何在不同操作系统上安装和配置 Docker 环境。