Docker 从原理到项目落地(镜像 / 容器 / 网络 / 卷 / Dockerfile)

这篇文章把 Docker 按"你真的能用来部署项目"的方式讲清楚:

  • 容器到底是什么,和虚拟机差在哪
  • 镜像分层、写时复制为什么能让交付更快
  • 网络/卷分别解决什么问题
  • Dockerfile 怎么写才可维护
  • 一个前后端 + MySQL 的项目如何容器化(思路级别)

1. 一句话理解 Docker

Docker 是一套基于容器的应用交付与运行方案:

  • 镜像(Image):把应用与依赖打包成可分发的"交付物"
  • 容器(Container):镜像运行后的实例(进程 + 隔离环境)
  • 网络/卷:分别解决容器间通信与数据持久化

2. 为什么要用 Docker(它解决什么痛点)

你可以用下面这句话当博客开头,也能当面试回答:

  • 解决"环境不一致":开发/测试/生产一致
  • 解决"交付不标准":镜像即交付物,可回滚、可复现
  • 解决"部署慢":启动容器比启动虚拟机快很多
  • 提升"资源利用率":容器共享宿主机内核,开销更小

3. 容器 vs 虚拟机:差异本质

  • 虚拟机:每个 VM 都有完整 OS 内核,启动慢、资源重
  • 容器:共享宿主机内核,通过 namespace/cgroup 隔离进程、网络、文件系统,启动快、资源轻

所以你可以把容器理解成:

  • "在同一台宿主机上跑的很多个隔离进程",但对应用来说像独立机器

4. 镜像 vs 容器:别背概念,背关系

  • 镜像:只读模板(分层),相当于"应用快照"
  • 容器:镜像运行起来的实例(镜像只读层 + 容器可写层)

容器删除后数据为什么没了?

  • 因为容器可写层跟着容器生命周期走
  • 要持久化就必须用 Volume / Bind Mount

5. Docker 为什么快(面试常问)

关键是三点:

  1. 共享内核:无需虚拟化整套 OS
  2. 镜像分层:复用层,拉取/构建更高效
  3. 写时复制:容器可写层轻量

6. Docker 三大核心对象

  • Image:构建与分发
  • Container:运行实例
  • Registry:镜像仓库(DockerHub/私有仓库)

配套两类基础设施:

  • Network:容器间通信
  • Volume:持久化

7. 网络:bridge/host/none/overlay 怎么选

最常用的是 bridge(默认)

  • 容器在私网,通过端口映射对外
  • 自定义 bridge 网络支持容器间用名称互通(内置 DNS)

其他模式:

  • host:容器与宿主共享网络栈,性能好但隔离弱
  • none:无网络
  • overlay:跨主机网络(Swarm/K8s)

项目落地建议:

  • 单机部署:bridge + 端口映射
  • 多机集群:交给 K8s/Swarm 的 overlay

8. Volume:容器化落地的关键

你容器化项目时最容易踩坑的点,就是"数据库数据怎么留住"。

  • 容器删掉会丢数据
  • 用 Volume 把数据挂到宿主机/由 Docker 管理

对比:

  • Volume:Docker 管理,跨容器复用更方便
  • Bind Mount:直接挂宿主机目录,灵活但更依赖宿主机路径

9. Dockerfile:CMD vs ENTRYPOINT(必考点)

  • ENTRYPOINT:固定入口程序
  • CMD :默认参数/默认命令,容易被 docker run 覆盖

常见搭配(Java 项目):

dockerfile 复制代码
ENTRYPOINT ["java","-jar","app.jar"]
CMD ["--spring.profiles.active=prod"]

10. 镜像瘦身:真的有用的 4 个技巧

  • 选小基础镜像:alpine / distroless(注意兼容性)
  • .dockerignore:排除 node_modules/target/logs
  • 清理缓存与构建产物
  • 多阶段构建:构建阶段带工具,运行阶段只保留产物

11. 一个前后端分离项目如何容器化(思路级别)

以"前端 Vue + 后端 Spring Boot + MySQL"为例:

  • MySQL:
    • 容器运行
    • 挂 Volume 持久化数据
  • 后端:
    • Dockerfile 打包 jar
    • 通过环境变量/配置指定数据库连接
  • 前端:
    • 构建产物(dist)可以:
      • 放到 Nginx 镜像中,或
      • 单独一个静态站容器
  • 统一用 docker network 让服务互通

这样你能做到:

  • 一条命令启动整套系统
  • 环境可复制、可回滚

12. 面试 30 秒模板(可直接背)

  • Docker 用镜像交付、用容器运行,解决环境一致性和部署标准化。
  • 容器共享宿主机内核,启动快、资源开销小;镜像分层复用提高构建与分发效率。
  • 落地时我最关注两点:网络(服务互通、端口映射)和卷(数据库/上传文件持久化)。
  • Dockerfile 里区分 ENTRYPOINT 和 CMD,多阶段构建和 .dockerignore 能显著减小镜像。
相关推荐
小洁忘了怎么分身1 小时前
多样本空间转录组 Harmony 整合与标签转移指南
网络·r语言·生信分析
三言老师4 小时前
CentOS8 Firewalld 高级规则中级实操教程
linux·运维·服务器·网络·centos
rcms152702692185 小时前
TEL 3308-000065-13 印刷电路板
网络
xywww1685 小时前
Claude Opus 5 企业使用怎么选:场景分层、成本测算和接入风险清单
网络
望安认证5 小时前
CRA 与 CE、RED、EUCC、NIS2、GDPR、AI Act、Data Act、DORA 等欧盟法规的关系:从法案结构看数字产品出海合规
网络·欧盟·cra·网络弹性法案·cra认证
风曦Kisaki6 小时前
# Kubernetes(K8s)笔记Day12 :K8s 七层代理(Ingress 和 Ingress Controller)
linux·笔记·云原生·容器·kubernetes
Lyra_Infra6 小时前
Docker OCI Runtime 启动失败问题排查与解决
后端·docker·架构
Hrain-AI6 小时前
2026企业AI Agent本地化落地:6平台横评+搭建步骤+成本模板
服务器·网络·人工智能
便利店10247 小时前
企业远程办公如何打通内网?网络层隧道与封装直觉
运维·服务器·网络·vpn·隧道
砚凝霜8 小时前
软考网络工程师|第 6 章 网络安全基础、攻击、等保完整备考笔记
网络·笔记·web安全