Docker 简介
什么是 Docker?
Docker 是一个开源的容器化平台,用于将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中,然后可以在任何安装了 Docker 的环境中运行。
简单类比:如果把传统的虚拟机比作一栋独立别墅(各自有完整的操作系统),那 Docker 容器就像公寓楼里的房间——共享底层操作系统内核,但彼此隔离、互不干扰。
核心概念
1. 镜像(Image)
- 一个只读的模板,包含了运行应用程序所需的代码、运行时、库、环境变量和配置文件
- 镜像是分层构建的,每一层代表一次变更
- 比喻:相当于一个压缩包或安装光盘
2. 容器(Container)
- 镜像的运行实例,是你真正运行应用的环境
- 容器之间相互隔离,拥有自己的文件系统、网络和进程空间
- 比喻:从安装光盘安装好的可运行程序
3. 仓库(Registry)
- 存放和管理镜像的地方,类似代码的 GitHub
- 最著名的是 Docker Hub(官方公共仓库)
- 可以搭建私有仓库
4. Dockerfile
- 一个文本文件,包含了一系列构建镜像的指令
- 使用
FROM、RUN、COPY、CMD等命令定义镜像内容
FROM python:3.11WORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD ["python", "app.py"]
为什么要用 Docker?
| 优势 | 说明 |
|---|---|
| 环境一致性 | 开发、测试、生产环境完全一致,消除"在我机器上能跑"的问题 |
| 快速部署 | 容器秒级启动,远快于虚拟机 |
| 资源高效 | 共享宿主机内核,占用资源少,一台机器可运行成百上千个容器 |
| 可移植性 | 一次构建,到处运行——本地、服务器、云端均可 |
| 版本管理 | 镜像层可追溯,轻松回滚 |
| 微服务架构 | 适合将应用拆分为多个独立部署的微服务 |
Docker vs 虚拟机
| 特性 | Docker 容器 | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 占用磁盘 | MB 级 | GB 级 |
| 操作系统 | 共享宿主机内核 | 需要完整 OS |
| 隔离级别 | 进程级隔离 | 完全隔离 |
| 性能损耗 | 几乎无 | 有一定开销 |
常用命令
bash# 镜像操作docker pull nginx # 拉取镜像docker images # 查看本地镜像docker rmi nginx # 删除镜像docker build -t myapp . # 构建镜像 # 容器操作docker run -d -p 80:80 nginx # 后台运行容器并映射端口docker ps # 查看运行中的容器docker ps -a # 查看所有容器(含已停止)docker stop <container_id> # 停止容器docker rm <container_id> # 删除容器docker exec -it <container_id> bash # 进入容器内部docker logs <container_id> # 查看日志 # 数据卷(持久化数据)docker run -v /host/path:/container/path nginx
实际工作流
开发者编写代码 ↓编写 Dockerfile 定义环境 ↓执行 docker build 构建镜像 ↓推送镜像到仓库(Docker Hub / 私有仓库) ↓服务器拉取镜像并 docker run 启动容器 ↓使用 Docker Compose / Kubernetes 编排多容器应用
Docker Compose(容器编排)
docker-compose.yml 用于定义和管理多个容器的应用:
yamlversion: '3'services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" db: image: "postgres:15" environment: POSTGRES_PASSWORD: example
一条命令启动全部服务:docker-compose up -d
总结
Docker 通过容器化技术解决了软件交付和部署中的环境差异问题,是现代 DevOps、CI/CD 流水线和微服务架构的基石。掌握 Docker 是后端开发、运维和云原生领域的必备技能。

