- 可否像 docker-compose 一样通过指定 Dockerfile 来自行构建镜像?
-
在真实的生产环境中,是怎样做到 k8s 拿到自己开发的应用程序的镜像的?我猜测有两种方案:
- 第一种:搭建私有镜像仓库,在本地 build 然后 push 到私有仓库,然后 k8s 从私有仓库拉取镜像
- 第二种:docker client 远程连接到 k8s 集群所在的服务器上的 docker server,将应用镜像构建到服务器本地,然后 k8s 从本地获取镜像
- 真实世界里,大家一般是采取的哪种方案,或者两者都不是?这两种方案有什么利弊吗?
- 请分别做回答
2019.12.03 更新:
问题已解决,第二种方案不可行的原因在于在 k8s 多节点的情况下无法保证每个节点本地都有镜像,而条件已经限制创建 Pod 要从节点本地拉取镜像。
除了第一种方案外,还有更先进的 CI/CD 方案:
代码 --push--> 代码仓库 --触发--> CI/CD 软件拉取代码、构建镜像 --push image--> 私有镜像仓库
之后 k8s 从私有镜像仓库拉取镜像。
第一种。
k8s 本身不应该关心镜像是什么构建的,它只负责部署,而第二种方式恰恰是耦合在一起了。
k8s 支持指定 registry,且是和 k8s 所在的宿主机 /etc/docker/daemon.json 的配置分离的,不需要也不应该去改 k8s 宿主机 docker-client 的配置,一切都应该通过 k8s 本身去完成。
常见的私有仓库的搭建方式有: