一、什么是 Docker?
1. 容器化技术基本概念
Docker 是一种容器化技术,能把代码 + 依赖 + 配置 + 环境打包成一个独立、可移植、可直接运行的包。简单理解:Docker = 把软件打包成 "绿色版",在哪都能跑,不挑系统、不报错。
2. Docker vs 传统虚拟机
特性 Docker 容器 虚拟机(VM)
体积 小(MB 级) 大(GB 级)
启动速度 秒级 分钟级
性能 接近原生 损耗大
隔离 进程级隔离 完全系统隔离
占用资源 极少 很高
一句话总结:虚拟机是 "整套电脑",Docker 是 "单个软件运行环境"。
3. Docker 三大核心组件
镜像(Image):只读的软件包(如系统、Python、MySQL)
容器(Container):镜像运行起来的实例(正在运行的软件)
仓库(Registry):存放镜像的地方(如 Docker Hub、阿里云)
二、Docker 的优势
1. 轻量 & 高性能
共享宿主机内核
不启动完整系统
资源占用极低
2. 跨平台一致运行
一次打包,到处运行开发、测试、生产环境完全一样,彻底解决:"在我电脑上能跑,你那不行" 的问题。
3. 快速启动 & 高效扩容
秒级启动
一键复制容器
非常适合微服务、高并发场景
4. 环境隔离
不同应用之间互不干扰:
Python2 和 Python3 共存
MySQL5.7 和 MySQL8.0 共存
不污染系统环境
三、Docker 核心概念(必须掌握)
1. 镜像(Image)
只读模板
分层存储(修改只增不减,节省空间)
可以继承、叠加、共享
例:python:3.11、mysql:8.0、nginx:alpine
2. 容器(Container)
镜像的运行实例
可启动、停止、删除
每个容器相互隔离
镜像 = 安装包,容器 = 运行中的软件
3. 仓库(Registry)
Docker Hub:公共仓库(默认)
阿里云 / 腾讯云:国内加速器
私有仓库:公司内部使用
4. Dockerfile
用来自动构建镜像的脚本
一行行命令告诉 Docker 如何打包
可重复、可版本管理、可团队共享
四、Docker 安装与配置
- 安装命令(Linux)
一键安装(官方推荐)
bash
curl -fsSL https://get.docker.com | bash
启动服务
systemctl start docker
systemctl enable docker
- Windows / macOS
直接下载 Docker Desktop 图形版,双击安装。 - 配置国内镜像加速器(必须配!)
编辑 /etc/docker/daemon.json:
java
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
- 验证安装成功
bash
docker version
docker info
docker run hello-world
五、Docker 常用命令(最常用合集)
- 镜像命令
bash
docker pull nginx # 下载镜像
docker images # 查看本地镜像
docker rmi nginx # 删除镜像
docker build -t myapp . # 用Dockerfile构建镜像
- 容器命令
bash
docker run -d -p 80:80 nginx # 后台运行,端口映射
docker ps # 查看运行中容器
docker ps -a # 查看所有容器
docker stop 容器ID # 停止
docker rm 容器ID # 删除
- 进入容器 & 日志
bash
docker exec -it 容器ID /bin/bash # 进入容器内部
docker logs 容器ID # 查看日志
六、Dockerfile 详解(打包脚本)
- 基础指令(必会)
bash
dockerfile
FROM python:3.11 # 基础镜像
WORKDIR /app # 工作目录
COPY . . # 复制文件
RUN pip install -r req.txt# 安装依赖
CMD ["uvicorn", "main:app"]# 启动命令
- 多阶段构建(减小体积)
bash
构建阶段
FROM python:3.11 AS builder
COPY . .
RUN pip install -r req.txt
运行阶段(更小)
FROM python:3.11-slim
COPY --from=builder /app .
CMD ["python", "main.py"]
- 最佳实践减少
RUN 层数
使用 .dockerignore 排除无用文件
使用轻量镜像(alpine 版本)
不存储密码、密钥在镜像里
七、Docker 网络与存储
- 网络模式
bridge:默认,独立网络,端口映射(最常用)
host:共享宿主机网络
none:无网络 - 数据持久化(重要!)
容器删除数据会丢失,必须挂载:
数据卷 Volume:Docker 管理(推荐)
绑定挂载 Bind Mount:挂载本地文件夹
bash
运行
docker run -v 本地目录:/容器目录 ... - 跨容器通信
同一网络下可直接用容器名访问
自动 DNS 解析
八、Docker Compose 多容器编排(必会) - 作用
一键启动多个容器如:Python + MySQL + Redis + Nginx - docker-compose.yml 示例
yaml
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
redis:
image: redis
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
- 常用命令
bash
docker-compose up -d # 启动
docker-compose down # 停止并删除
docker-compose logs # 查看日志
八、Docker 在生产环境的应用
- 容器编排
K8s (Kubernetes):企业级容器编排
Docker Swarm:轻量级编排 - 监控 & 日志
Prometheus + Grafana 监控
ELK 日志收集 - 生产安全
镜像扫描漏洞
使用非 root 用户运行
最小权限原则
九、常见问题与调试技巧
- 容器启动失败
bash
docker logs 容器ID # 看日志
docker exec 进入调试
- 镜像体积太大
使用 alpine 基础镜像
多阶段构建
清理缓存 - 性能调优
限制 CPU / 内存
使用数据卷代替本地挂载
十、未来趋势与生态
- 云原生 & Serverless
Docker 是云原生的基石,所有云平台都原生支持。 - CI/CD 持续集成
自动化构建、测试、部署必备工具。 - 新兴工具
Containerd:Docker 底层运行时
Podman:无 daemon 容器工具
Buildah:镜像构建工具
十一、整篇文章核心总结
Docker = 容器化打包工具
镜像 = 软件包,容器 = 运行实例
一次打包,到处运行
Docker Compose 管理多容器
企业部署、微服务、机器学习部署 必备