适用于 CodeBuild 的自定义映像示例中的 Docker
此示例通过使用 AWS CodeBuild 和自定义 Docker 构建映像(Docker Hub 中的 docker:dind
)来构建和运行 Docker 映像。
要了解如何改用由支持 Docker 的 CodeBuild 提供的构建映像来构建 Docker 映像,请参阅我们的Docker 示例。
运行该示例可能会导致您的 AWS 账户产生相关费用。这些费用包括可能针对 CodeBuild 和 AWS 资源以及与 Amazon S3、AWS KMS 和 CloudWatch
Logs 相关的操作收取的费用。有关更多信息,请参阅 CodeBuild 定价
运行示例
要运行此示例,请执行以下操作:
-
按照本主题的“目录结构”和“文件”部分中的说明创建文件,然后将其上传到 S3 输入存储桶或者上传到 AWS CodeCommit、GitHub 或 Bitbucket 存储库。
重要 请不要上传
,而只上传(root directory name)
中的文件。(root directory name)
如果您使用的是 S3 输入存储桶,请务必创建一个包含文件的 ZIP 文件,然后将其上传到输入存储桶。请不要将
添加到 ZIP 文件中,而只添加(root directory name)
中的文件。(root directory name)
-
请按照 直接运行 AWS CodeBuild 中的步骤创建构建项目、运行构建并查看相关构建信息。
如果您使用 AWS CLI 创建构建项目,则
create-project
命令的 JSON 格式输入可能与此类似。(请将占位符替换为您自己的值。){ "name": "sample-docker-custom-image-project", "source": { "type": "S3", "location": "codebuild-
region-ID
-account-ID
-input-bucket/DockerCustomImageSample
.zip" }, "artifacts": { "type": "NO_ARTIFACTS" }, "environment": { "type": "LINUX_CONTAINER", "image": "docker:dind", "computeType": "BUILD_GENERAL1_SMALL", "privilegedMode": true }, "serviceRole": "arn:aws:iam::account-ID
:role/role-name
", "encryptionKey": "arn:aws:kms:region-ID
:account-ID
:key/key-ID
" }注意 By default, Docker containers do not allow access to any devices. Privileged mode grants a build project's Docker container access to all devices. For more information, see Runtime Privilege and Linux Capabilities
on the Docker Docs website. -
要查看构建结果,请在构建日志中查找字符串
Hello, World!
。 有关更多信息,请参阅查看构建详细信息。
目录结构
此示例假定有这样一个目录结构。
(root directory name)
├── buildspec.yml
└── Dockerfile
Files
在此示例中使用的操作系统的基本映像是 Ubuntu。此示例将使用这些文件。有关构建规范文件中引用的 OverlayFS 存储驱动程序的更多信息,请参阅 Docker
网站上的使用 OverlayFS 存储驱动程序
buildspec.yml
(在
中)
(root directory
name)
version: 0.2 phases: install: commands: - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 & - timeout 15 sh -c "until docker info; do echo .; sleep 1; done" pre_build: commands: - docker build -t helloworld . build: commands: - docker images - docker run helloworld echo "Hello, World!"
如果基本操作系统是 Alpine Linux,请在 buildspec.yml
中向 timeout
添加 -t
参数:
- timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
Dockerfile
(在
中)
(root directory
name)
FROM maven:3.3.9-jdk-8 RUN echo "Hello World"
相关资源
-
有关 AWS CodeBuild 入门的信息,请参阅通过控制台开始使用 AWS CodeBuild。
-
有关解决 CodeBuild 中的问题的信息,请参阅AWS CodeBuild 疑难解答。
-
有关 CodeBuild 中的配额的信息,请参阅AWS CodeBuild 的配额。