Docker 是什么
一句话总结
一种轻量级”打包工具”——把你的应用和它需要的所有依赖(系统库、配置文件、环境变量)打包成一个标准化的镜像,拿到任何 Linux 机器上都能直接跑,保证结果一模一样。
🤔 为什么会有它 / 解决了什么问题
“在我电脑上能跑啊”是程序员最怕听到的话。传统部署方式依赖手动配置系统环境,换台机器就各种报错。Docker 把应用和它的完整环境打包在一起,彻底消灭了”环境不一致”问题。
🔍 具体原理 / 运作逻辑
你写一个 Dockerfile(配方文件),描述从哪个基础系统开始、装什么软件、复制什么文件、暴露什么端口。Docker 用这个配方构建出一个镜像(Image)。运行镜像时,Docker 引擎利用 Linux 内核的 Namespace(隔离视图)和 Cgroups(限制资源),在宿主机上启动一个隔离的容器(Container),看起来像一台独立的小电脑。
更硬核的技术细节(点击展开)
Docker 不是虚拟机——所有容器共享宿主机内核,没有独立 OS,因此启动快(毫秒级)、资源开销小。隔离靠内核特性:PID Namespace(进程隔离)、Network Namespace(网络隔离)、Mount Namespace(文件系统隔离)、Cgroups(CPU/内存限制)。镜像分层(Layer)是 Docker 的关键设计——每一层只记录差异,多个镜像共享底层,节省磁盘和带宽。Docker Compose 用 YAML 编排多容器,适合本地开发和简单部署。
🧭 什么情况下会用到 / 什么场景会遇到它
- 部署 Web 应用(前后端打包成一个镜像)
- 本地跑开发环境,避免污染宿主系统
- CI-CD 流水线中构建和测试
🛠️ 怎么上手 / 在哪操作
装 Docker Desktop (Windows/Mac) 或 Docker Engine (Linux),写 Dockerfile,用 docker compose up 启动。
⚖️ 副作用 / 代价 / 取舍
- 容器共享宿主内核——不能在容器里跑和宿主机不同版本的内核或不同操作系统
- 镜像体积容易膨胀——一个 Node 基础镜像可能 1GB+,基础镜像管理不善浪费空间
- 有学习曲线——Dockerfile 最佳实践(多阶段构建、层合并、.dockerignore)需要时间掌握
🕰️ 来历
- 谁提出/创造的:Solomon Hykes 创立 dotCloud 公司,开源 Docker 项目
- 什么时候出现的:2013 年首次发布,迅速成为容器化的行业标准
🔗 关联 / 经常一起出现的概念
- Frappe Press:Press 的 Bench 就是通过 Docker 容器运行的,每个 Site 跑在独立 container 里,Press 管理容器的生命周期
- Cloudflare:Docker 打包应用 → 推到 Registry → Akash/任何有 Docker 引擎的机器拉取运行。Docker 是”应用打包标准”,CF 和 Akash 是”运行环境”
⚠️ 注意事项 / 常见误区
Docker 不等于”云原生”。Docker 只是打包工具,K8s/Akash 才是编排调度。单机用 Docker Compose,集群用 K8s,不要把概念混了。
📎 记忆锚点
把你的应用和它的整个环境装进一个”集装箱”,到哪台机器都能开箱即用。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-13 | 首次创建 | - |