混合本地和远程Docker映像repo?
我在基于Kubernetes集群的CI-CD管道上工作。 管道的运行方式如下:混合本地和远程Docker映像repo?,docker,kubernetes,repository,Docker,Kubernetes,Repository,我在基于Kubernetes集群的CI-CD管道上工作。 管道的运行方式如下: spec: initContainers: - name: prime-the-cache image: docker:18-dind command: - sh - -c - | if something_awesome; then docker pull from/a/registry else doc
spec:
initContainers:
- name: prime-the-cache
image: docker:18-dind
command:
- sh
- -c
- |
if something_awesome; then
docker pull from/a/registry
else
docker load -i some/other/path
fi
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.lock
readOnly: true
containers:
- name: primary
image: a-local-image
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
ECR机器有码头工人。
詹金斯是一个容器。
使用Java、Maven等构建了构建器映像。
然后运行此生成器映像以生成应用程序映像
然后,该应用程序使用Helm在kubernetes AWS集群中运行。
然后使用params运行builder映像,对应用程序运行Maven驱动的测试。
现在,这些步骤的一部分不需要推送图像。例如,可以随意缓存或处置构建器映像-如果需要,可以重新构建
因此,这些图像的名称类似于mycompany/mvn builder:latest
当直接通过Docker使用时,此选项效果良好
当Kubernetes和Helm来时,它需要URI的图像,并尝试从远程repo获取它们。因此,使用本地名称mycompany/mvn builder:latest不起作用:
Error response from daemon: pull access denied for collab/collab-services-api-mvn-builder, repository does not exist or may require 'docker login'
从技术上讲,我可以命名它/mvn builder并推送它,但这打破了在minikube中本地运行所有这些的可能性,因为很难根据愚蠢的AWS 12小时令牌进行身份验证记住它在集群中运行
是否可以混合使用远程回购和本地缓存?换句话说,我可以让Docker查看远程存储库吗?如果找不到或失败,请参见上文,它将获取缓存的映像
因此,如果我在Kubernetes资源中使用foo/bar:latest,它将尝试获取,发现无法获取,并将获取本地foo/bar:latest?我相信initContainer会这样做,前提是它可以访问/var/run/docker.sock,并且您的集群通过有条件地拉取或docker加载映像来允许这样做,这样,当主容器启动时,图像将始终被缓存
大致如下:
spec:
initContainers:
- name: prime-the-cache
image: docker:18-dind
command:
- sh
- -c
- |
if something_awesome; then
docker pull from/a/registry
else
docker load -i some/other/path
fi
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.lock
readOnly: true
containers:
- name: primary
image: a-local-image
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock