Image Build
- Kaniko
- buildpacks
- buildkit
- Source-to-Image (S2I)
- Jib
在 Dockerfile 中使用 ARG 命令定义变量,例如:
ARG MY_VAR=default_value
在构建命令中使用 --build-arg 选项传递变量值,例如:
kaniko build --build-arg MY_VAR=new_value -t my_image .
这将会将 MY_VAR 变量的值设置为 "new_value",并将该值传递到构建过程中。
https://buildkite.com/blog/docker-kaniko-buildpacks-building-containers-in-containers-on-k8s
容器镜像构建不可重复
因为各种各样的原因,对同一份源码多次打容器镜像,结果可能是不一致的。
比如:
- 底层镜像更新了,比如 debian:buster 就永远是最新的小版本。
- 构建环境变更了。比如多阶段构建的 sdk 镜像更新了,或者依赖库更新了。
- 即使镜像构建环境完全一致,因为时间戳等原因,也会导致镜像 Hash 摘要不一样。
总之就是即使源码没有变化,多次构建出的镜像也不会一致。
如果要求比较严格,那生产环境只应该上线被测试过的镜像,也就是要求「镜像一致」! 可开发人员通常都以 Git 仓库为中心,大家更希望只要求「源码一致」。
如果只要求「源码一致」,整个 CI/CD 流程可以简化很多,开发测试环境和生产环境可以完全隔离,只需要交付源码。
而如果要求镜像一致,那测试通过的镜像必须被传递到生产环境,必须交付测试环境的镜像到生产环境,流程会更复杂。
这里的分歧,源自「容器镜像构建不可重复」这个问题。
https://github.com/raif-ahmed/ubi-vs-distroless-images
https://www.reddit.com/r/redhat/comments/s2jz7y/current_thoughts_on_ubi/
https://www.rookout.com/blog/developer-tooling-for-kubernetes-in-2021-part-4/
https://github.com/shipwright-io/build/blob/main/docs/buildstrategies.md
https://github.com/aws/containers-roadmap/issues/1409
Dockerfiles 集锦
编写 Dockerfile 时,可以在 github 上先搜索一下相关的项目,参考(COPY)别人的 Dockerfile,避免无从下手的情况。
运维相关
CI/CD 相关
数据库相关
语言相关