我们试图设置一个尽可能接近默认值的OpenShift流,而不必使用Jenkins。
到目前为止,我已经设法使 s2i 生成的 Dockerfile 适应我们的需求(以获得 s2i 映像的好处(,并设置了一个简单的"oc new-app"管道,该管道在 git 存储库之后创建一个构建将生成的 docker 映像推送到映像流,并由映像流更新触发的部署推送到默认 pod。 这很好用。
现在我们希望另外将此 docker 映像推送到外部 docker 存储库(OpenShift 已知的红帽容器注册表(,我本质上希望保留现有流程,而不是使其适应使用外部注册表而不是内部注册表。
那么,我可以设置一个"构建"或类似的东西,它只做那个映像并将其推送到 docker 注册表吗? 如何使用 oc
命令进行设置?
你想把buildConfig
构建的映像推送到外部注册表,对吗?我认为工作流程是这样的:将 Docker 凭据用于私有注册表。
- 创建凭据
secret
$ oc create secret generic <secret_name>
--from-file=.dockerconfigjson=<path/to/.docker/config.json>
--type=kubernetes.io/dockerconfigjson
将
secret
与builder
ServiceAccount
链接。
在buildConfig
中配置构建镜像推送目标,如下所示。
spec:
output:
to:
kind: DockerImage
name: external.registry.io/subpath/imagename:latest
pushSecret:
name: <secret_name>
我希望它对你有所帮助。
您可以使用 skopeo 命令行工具将容器映像从一个 docker 注册表复制到另一个注册表,而无需再次构建映像。
这是Red Hat官方支持的工具,是新工具套件(buildah,podman,skopeo等(的一部分,以支持在无守护进程cri-o容器运行时而不是docker上运行OpenShift和Kubernetes。
通过docker login
登录到源注册表和目标注册表,或使用--src-creds
和--dest-creds
标志。
skopeo copy
--src-creds=testuser:testpassword
--dest-creds=otheruser:otherpassword
docker://myregistrydomain.com:5000/dockerimage:tag
docker://mysecondregistrydomain.com:5000/dockerimage:tag