

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# CodeBuild 自訂映像範例中的 Docker
<a name="sample-docker-custom-image"></a>

下列範例會使用 和自訂 Docker 建置映像 (`docker:dind`在 Docker Hub 中） 來建置 AWS CodeBuild 和執行 Docker 映像。

若要了解如何使用 CodeBuild 提供的建置映像搭配 Docker 支援來建置 Docker 映像，請參閱我們的 [「將 Docker 映像發佈至 Amazon ECR」範例](sample-docker.md)。

**重要**  
執行此範例可能會導致 AWS 您的帳戶產生費用。這包括 CodeBuild 和與 Amazon S3 相關的 AWS 資源和動作 AWS KMS，以及 CloudWatch Logs 的可能費用。如需詳細資訊，請參閱 [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)和 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing)。

**Topics**
+ [在自訂映像範例中執行 Docker](#sample-docker-custom-image-running)

## 在自訂映像範例中執行 Docker
<a name="sample-docker-custom-image-running"></a>

使用下列程序在自訂映像範例中執行 Docker。如需此範例的詳細資訊，請參閱 [CodeBuild 自訂映像範例中的 Docker](#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. 建立組建專案、執行組建，以及檢視相關的組建資訊。

   如果您使用 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 功能](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"
```