选型

Docker

你可能会说

同一份代码,我电脑能跑,服务器就报错,同事让我用 Docker。

把应用和它的依赖一起打成镜像镜像分层存储,容器是镜像的运行实例;同一镜像在哪台机器上跑,环境都一样。它解决「装环境」,不解决「多机调度」。
也常被叫作容器镜像
先问一句环境总是不一致?
默认Docker→擅长镜像即交付→别用不管多机调度
成熟度采用

什么时候选它

  • 统一开发、测试、生产环境
  • 一键起依赖(数据库、缓存、消息队列)做本地开发
  • 交付物标准化:镜像推到仓库,到哪都 docker run
  • CI 里构建、测试、扫描的隔离环境

什么时候别选

  • 多机调度、自动扩缩容、自愈——那是 Kubernetes 的事
  • 只想装一个桌面软件,没必要容器化
  • 把容器当安全边界:它共享宿主机内核,隔离弱于虚拟机
容易混在一起 · 怎么分
Docker≠虚拟机

容器共享宿主机内核,启动快、开销小;虚拟机有独立内核,隔离更强但更重。

Docker≠Kubernetes

Docker 负责打包和运行一个容器;k8s 负责在很多机器上调度很多容器。

镜像≠容器

镜像是只读模板,容器是它运行起来的实例,可写层在容器上。

Q面试会问什么

  • 问:镜像为什么分层?
    答:每层只读、可复用和缓存,构建和分发更快;容器启动时再加一层可写层。
  • 问:容器和虚拟机的区别?
    答:容器共享内核、进程级隔离、秒级启动;虚拟机虚拟硬件、独立内核,隔离更强但更重。
  • 问:多阶段构建解决什么?
    答:构建环境和运行环境分离,最终镜像只带运行所需文件,体积和安全面都更小。
延伸阅读 · 权威出处