📌 本文档面向开发和运维人员,覆盖 Docker 核心概念、常用命令、镜像构建、Docker Compose 编排,以及日常排错思路。基于 Docker Engine 24.x+ 整理。
Docker 是一个容器化平台,它把应用及其依赖打包到一个可移植的“容器”里,确保在任何环境下运行结果一致。
与传统虚拟机的区别:
| 特性 | 虚拟机 (VM) | Docker 容器 |
|---|---|---|
| 启动速度 | 分钟级 | 秒级 |
| 资源占用 | 重(完整 OS) | 轻(共享宿主机内核) |
| 隔离级别 | 硬件级 | 进程级(Namespace/Cgroups) |
| 镜像大小 | GB 级 | MB 级 |
| 性能 | 接近原生但有损耗 | 接近原生 |
📌 一句话理解:虚拟机是“带房子的地”,Docker 是“带家具的拎包入住公寓”。
编辑 /etc/docker/daemon.json(Linux)或 Docker Desktop Settings(Windows/macOS):
重启 Docker:
docker run 常用参数| 参数 | 含义 |
|---|---|
-d |
后台运行 |
-p 宿主机:容器 |
端口映射 |
-v 宿主机:容器 |
挂载数据卷 |
--name |
指定容器名 |
--restart=always |
自动重启 |
-e KEY=VALUE |
设置环境变量 |
--network |
指定网络 |
--rm |
容器停止后自动删除 |
-it |
交互式终端 |
| 指令 | 作用 |
|---|---|
FROM |
基础镜像 |
RUN |
执行命令 |
COPY |
拷贝文件到镜像 |
ADD |
类似 COPY,支持自动解压和远程 URL |
WORKDIR |
设置工作目录 |
ENV |
设置环境变量 |
EXPOSE |
声明暴露端口 |
CMD |
容器启动时的默认命令 |
ENTRYPOINT |
容器启动入口,可被 CMD 补充 |
VOLUME |
声明挂载点 |
构建并运行:
📌 多阶段构建能把构建工具、源码、依赖留在中间层,最终镜像只保留产物,体积可缩小几十倍。
| 类型 | 适用场景 | 路径 |
|---|---|---|
| Volume | 数据库、持久化数据 | Docker 管理目录 |
| Bind Mount | 开发时热更新代码 | 宿主机指定目录 |
| tmpfs | 敏感临时数据 | 内存中 |
常用网络模式:
| 模式 | 说明 |
|---|---|
bridge |
默认,容器通过 NAT 访问外网 |
host |
容器与宿主机共享网络栈 |
none |
无网络 |
container:<name> |
共享另一个容器的网络 |
多容器应用(如 Web + 数据库 + 缓存)用 docker run 逐个启动太麻烦,Compose 用 YAML 文件一次性定义和启动所有服务。
Docker Desktop 自带 Compose。Linux 安装 Docker 时安装 docker-compose-plugin 即可。
docker 组user: "1000:1000" 指定运行用户🚧 docker system prune -a 会清理所有未使用的镜像和容器,生产环境慎用。
alpine 或 slim 版本,减小体积和攻击面。docker run。myapp:1.2.3,不要只用 latest。https://docs.docker.comhttps://hub.docker.comhttps://docs.docker.com/compose/https://docs.docker.com/develop/develop-images/dockerfile_best-practices/