Docker 是什么

一句话总结

一种轻量级”打包工具”——把你的应用和它需要的所有依赖(系统库、配置文件、环境变量)打包成一个标准化的镜像,拿到任何 Linux 机器上都能直接跑,保证结果一模一样。


🤔 为什么会有它 / 解决了什么问题

“在我电脑上能跑啊”是程序员最怕听到的话。传统部署方式依赖手动配置系统环境,换台机器就各种报错。Docker 把应用和它的完整环境打包在一起,彻底消灭了”环境不一致”问题。


🔍 具体原理 / 运作逻辑

你写一个 Dockerfile(配方文件),描述从哪个基础系统开始、装什么软件、复制什么文件、暴露什么端口。Docker 用这个配方构建出一个镜像(Image)。运行镜像时,Docker 引擎利用 Linux 内核的 Namespace(隔离视图)和 Cgroups(限制资源),在宿主机上启动一个隔离的容器(Container),看起来像一台独立的小电脑。


🧭 什么情况下会用到 / 什么场景会遇到它

  • 部署 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首次创建-