1. 只能对一个 Registy 进行 login,如果 FROM 的 image 和 push 的 image registry 不相同,则无法实现。
提供了镜像 Registry 的 Login 和镜像构建并推送两类步骤,以提高灵活性。比如,支持 FROM Image 和构建出来的目标 Image 来自不同的私有镜像仓库的场景。
基于 buildx 提供标准、透明且灵活的的镜像缓存管理机制。如果是私有构建机器,可以选择本地缓存;如果是在公共构建集群,则可以采用远端的 Registry 作为缓存存储。
基于 buildx 提供了多架构镜像构建能力,简单的添加一个参数,就可以同时构建 amd64 和 arm64 两种 CPU 架构的镜像。两个镜像共享同一个镜像地址,在不同架构的机器上拉取镜像时候,会自动拉取对应架构的镜像。
需要注意的是,为了使用上述新能力,需要在构建任务的构建环境中选择“指定容器构建”。如果是私有构建机器的话,需要选择在“默认 VM 环境”上构建。
查看源码,就可以了解该步骤的实现细节。
镜像 Registry Login 与镜像构建的解耦
Cloud Native
假设有这个场景,你有两个阿里云账号,A 和 B。
registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine
B 账号下有一个镜像作为应用镜像,也是私有镜像,地址如下:
registry.cn-hangzhou.aliyuncs.com/yunxiao-demo/app1
该镜像的 Dockerfile 如下,来自代码库:https://atomgit.com/flow-example/spring-boot/blob/master/Dockerfile5
# 基础镜像来自A账号,构建出来的镜像 registry.cn-hangzhou.aliyuncs.com/yunxiao-demo/app1 会推送到B账号
FROM registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine
# 下面这行COPY是为了验证缓存是否生效用的
COPY deploy.sh deploy.sh
# 下面这行COPY,因为每次构建出来的jar包都不相同,因此不会走缓存
COPY target/application.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
在这个镜像构建步骤前,需要有一个 Java 构建的步骤来产生这个 target/application.jar 文件。
使用 Registry 作为镜像缓存存储
Cloud Native
在上面的例子中,日志的最后部分输出:
registry.cn-hangzhou.aliyuncs.com/yunxiao-demo/app1:flow-docker-build-cache
使用本机作为缓存存储
Cloud Native
如果你使用私有构建机的话,则推荐使用“本地缓存”的选项。docker 构建会直接本地的 docker deamon 来进行构建,因此会使用本地缓存。
构建多架构镜像
Cloud Native
一个镜像包含了 CPU 架构的属性,在 amd64 芯片的机器上构建产出的镜像在 arm64 的机器上将无法启动。如果你的镜像需要同时在 amd64 和 arm64 等不同的芯片架构上使用,那么可以轻松的在云效上构建出来多架构的镜像。
在这次构建中,会产生一个镜像地址:registry.cn-hangzhou.aliyuncs.com/yunxiao-demo/app1:2024-09-19-12-24-56,但实际包含的是两个镜像。当从 arm64 的机器上进行拉取,则拉取的就是 arm64 版本的镜像,当从 amd64 的机器上进行拉取,则拉取的就是 amd64 版本的镜像。
总结
Cloud Native
云效镜像构建能力的增强,得益于几个方面:
基于源构建的方式(https://atomgit.com/flow-step)构建步骤,以便用户可以了解实现细节。如果有定制化的需求,可以fork这个代码库,修改后发布到自己的企业中来使用(https://help.aliyun.com/zh/yunxiao/user-guide/use-flow-cli-to-customize-development-steps) 使用更细力度的原子能力的组合来覆盖更多的构建场景,同时提供任务模板,来降低配置的复杂度。 拥抱最新的构建技术和标准,提供更加灵活的构建参数配置能力,并大幅提高了构建缓存的可用性和上传下载的速度(https://github.com/docker/buildx)
欢迎点击阅读原文,前往云效流水线 Flow(flow.aliyun.com)进行体验!