以下示例通过使用 AWS CodeBuild 和自定义 Docker 构建映像(Docker Hub 中的 docker:dind
)来构建和运行 Docker 映像。
要了解如何改用由支持 Docker 的 CodeBuild 提供的构建映像来构建 Docker 映像,请参阅我们的“将 Docker 映像发布到 Amazon ECR”示例。
重要
运行该示例可能会导致您的 AWS 账户产生相关费用。这包括 CodeBuild 可能产生的费用,以及与 Amazon S3、AWS KMS 和 CloudWatch Logs 相关的 AWS 资源和操作可能产生的费用。有关更多信息,请参阅 CodeBuild 定价
在自定义映像示例中运行 Docker
使用以下过程在自定义映像示例中运行 Docker。有关此示例的更多信息,请参阅适用于 CodeBuild 的自定义映像示例中的 Docker。
在自定义映像示例中运行 Docker
-
按照本主题的目录结构和文件部分的说明创建文件,然后将其上传到 S3 输入存储桶或者上传到 AWS CodeCommit、GitHub 或 Bitbucket 存储库。
重要
请不要上传
,而只上传(root directory name)
中的文件。(root directory name)
如果您使用的是 S3 输入存储桶,请务必创建一个包含这些文件的 ZIP 文件,然后将其上传到输入存储桶。请不要将
添加到 ZIP 文件中,而只添加(root directory name)
中的文件。(root directory name)
-
创建构建项目、运行构建和查看相关构建信息。
如果您使用 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": false }, "serviceRole": "arn:aws:iam::account-ID
:role/role-name
", "encryptionKey": "arn:aws:kms:region-ID
:account-ID
:key/key-ID
" }注意
默认情况下,为非 VPC 构建启用 Docker 进程守护程序。如果您想使用 Docker 容器进行 VPC 构建,请参阅 Docker 文档网站上的运行时权限和 Linux 功能
并启用特权模式。此外,Windows 不支持特权模式。 -
要查看构建结果,请在构建的日志中查找字符串
Hello, World!
。有关更多信息,请参阅 查看构建详细信息。
目录结构
此示例采用以下目录结构。
(root directory name)
├── buildspec.yml
└── Dockerfile
文件
在此示例中使用的操作系统的基本映像是 Ubuntu。此示例将使用这些文件。
buildspec.yml
(在
)(root directory
name)
version: 0.2
phases:
pre_build:
commands:
- docker build -t helloworld .
build:
commands:
- docker images
- docker run helloworld echo "Hello, World!"
Dockerfile
(在
)(root directory
name)
FROM maven:3.3.9-jdk-8
RUN echo "Hello World"