Kaniko 从入门到实践
1. Kaniko 是什么 Kaniko 是一个由 Google 开源的,在容器或 Kubernetes 集群内部,直接根据 Dockerfile 构建容器镜像的工具。 它最核心的特点只有一个:不依赖 Docker daemon(守护进程),所有构建动作都在用户态(userspace)完成。这意味着你不需要在集群里跑一个 Docker 服务,也不需要挂载 /var/run/docker.sock,就可以构建出标准镜像。 2. Kaniko 解决了什么问题 在 Kaniko 出现之前,CI 里构建镜像的主流做法是 Docker-in-Docker(DinD)。即在 CI Job 里再起一个 Docker 守护进程,用它去 build。这套方案在 Kubernetes 集群里有两个致命痛点: 需要 privileged 特权模式:dind 服务容器要操控内核特性,必须给 Pod 开 privileged: true。这是很严重的安全隐患——容器可能逃逸到宿主机,很多安全策略严格的集群直接禁止。 性能差:每个 Job 都额外拉起一个完整 Docker daemon,启动慢、占用高,多任务并发时更是灾难。 Kaniko 就是为了解决这个问题而生的:不用特权、不用 daemon,在标准 K8s 集群里就能安全构建镜像。 问题 DinD(旧方案) Kaniko 需要 privileged 特权 ✅ 必须 ❌ 不需要 依赖 Docker daemon ✅ 必须 ❌ 完全不需要 挂载 docker.sock ✅ 需要 ❌ 不需要 安全性 有容器逃逸风险 纯用户态,安全 性能开销 每个 Job 起 daemon,慢 轻量,快 Kaniko 的核心价值用一句话来说就是:在不安全、不方便跑 Docker daemon 的环境(尤其是 K8s 集群)里,仍然能安全、快速地构建镜像。 ...