

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 自定义镜像示例中的 Docker CodeBuild
<a name="sample-docker-custom-image"></a>

以下示例通过使用和自定义 Docker 构建映像（在 Docker Hub `docker:dind` 中）来构建 AWS CodeBuild 和运行 Docker 镜像。

要了解如何改用由 Docker 支持的构建镜像来 CodeBuild 构建 Docker 镜像，请参阅我们的。[“将 Docker 映像发布到 Amazon ECR”示例](sample-docker.md)

**重要**  
运行此示例可能会导致您的 AWS 账户被扣款。其中包括与 Amazon S3 和 CloudWatch 日志相关的 AWS 资源和操作可能产生的费用。 CodeBuild AWS KMS有关更多信息，请参阅[CodeBuild 定价](https://aws.amazon.com/codebuild/pricing)、[Amazon S3 定价](https://aws.amazon.com/s3/pricing)、[AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing)和[亚马逊 CloudWatch定价](https://aws.amazon.com/cloudwatch/pricing)。

**Topics**
+ [在自定义映像示例中运行 Docker](#sample-docker-custom-image-running)

## 在自定义映像示例中运行 Docker
<a name="sample-docker-custom-image-running"></a>

使用以下过程在自定义映像示例中运行 Docker。有关此示例的更多信息，请参阅[自定义镜像示例中的 Docker CodeBuild](#sample-docker-custom-image)。

**在自定义映像示例中运行 Docker**

1. 按照本主题[目录结构](#sample-docker-custom-image-dir)和[文件](#sample-docker-custom-image-files)部分所述创建文件，然后将其上传到 S3 输入存储桶或 AWS CodeCommit GitHub、或 Bitbucket 存储库。
**重要**  
请不要上传 `(root directory name)`，而只上传 `(root directory name)` 中的文件。  
如果您使用的是 S3 输入存储桶，请务必创建一个包含这些文件的 ZIP 文件，然后将其上传到输入存储桶。请不要将 `(root directory name)` 添加到 ZIP 文件中，而只添加 `(root directory name)` 中的文件。

1. 创建构建项目、运行构建和查看相关构建信息。

   如果您使用创建构建项目，则`create-project`命令的 JSON 格式输入可能与此类似。 AWS CLI (请将占位符替换为您自己的值。)

   ```
   {
     "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 功能](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)并启用特权模式。此外，Windows 不支持特权模式。

1. 要查看构建结果，请在构建的日志中查找字符串 `Hello, World!`。有关更多信息，请参阅 [查看构建详细信息](view-build-details.md)。

### 目录结构
<a name="sample-docker-custom-image-dir"></a>

此示例采用以下目录结构。

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### 文件
<a name="sample-docker-custom-image-files"></a>

在此示例中使用的操作系统的基本映像是 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"
```