

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

# 自訂 Flink 和 FluentD 的 Docker 映像
<a name="jobruns-flink-docker-flink-fluentd"></a>

執行下列步驟，使用 Apache Flink 或 FluentD 映像自訂 Amazon EMR on EKS 的 Docker 映像。其中包括取得基礎映像、自訂映像、發佈映像和提交工作負載的技術指導。

**Topics**
+ [先決條件](#jobruns-flink-docker-flink-fluentd-prereqs)
+ [步驟 1：從 Amazon Elastic Container Registry 擷取基礎映像](#jobruns-flink-docker-flink-fluentd-retrieve-base)
+ [步驟 2：自訂基礎映像](#jobruns-flink-docker-flink-fluentd-customize-image)
+ [步驟 3：發佈您的自訂映像](#jobruns-flink-docker-flink-fluentd-publish-image)
+ [步驟 4：使用自訂映像在 Amazon EMR 中提交 Flink 工作負載](#jobruns-flink-docker-flink-fluentd-submit-workload)

## 先決條件
<a name="jobruns-flink-docker-flink-fluentd-prereqs"></a>

在自訂 Docker 映像之前，請確定您已完成下列先決條件：
+ 完成[設定 Amazon EMR on EKS 的 Flink Kubernetes Operator](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-flink-kubernetes-operator-setup.html) 步驟。
+ 已在您的環境中安裝 Docker。如需詳細資訊，請參閱[獲取 Docker](https://docs.docker.com/get-docker/)。

## 步驟 1：從 Amazon Elastic Container Registry 擷取基礎映像
<a name="jobruns-flink-docker-flink-fluentd-retrieve-base"></a>

基礎映像包含您存取其他 所需的 Amazon EMR 執行期和連接器 AWS 服務。如果您使用 Amazon EMR on EKS 搭配 Flink 6.14.0 版或更新版本，您可以從 Amazon ECR Public Gallery 取得基礎映像。瀏覽圖庫以尋找映像連結，然後將映像拉到本地工作區。例如，對於 Amazon EMR 6.14.0 版本，下列`docker pull`命令會傳回最新的標準基礎映像。將 取代`emr-6.14.0:latest`為您想要的發行版本。

```
docker pull public.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink:latest
```

以下是 Flink 圖庫影像和 Fluentd 圖庫影像的連結：
+ [emr-on-eks/flink/emr-6.14.0-flink](https://gallery.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink)
+ [emr-on-eks/fluentd/emr-6.14.0(](https://gallery.ecr.aws/emr-on-eks/fluentd/emr-6.14.0)

## 步驟 2：自訂基礎映像
<a name="jobruns-flink-docker-flink-fluentd-customize-image"></a>

下列步驟說明如何自訂您從 Amazon ECR 提取的基礎映像。

1. 在您的本機工作區建立新的 `Dockerfile`。

1. 編輯 `Dockerfile`並新增下列內容。這會`Dockerfile`使用您從 提取的容器映像`public.ecr.aws/emr-on-eks/flink/emr-7.12.0-flink:latest`。

   ```
   FROM public.ecr.aws/emr-on-eks/flink/emr-7.12.0-flink:latest
   USER root
   ### Add customization commands here ####
   USER hadoop:hadoop
   ```

   如果您使用的是 ，請使用下列組態`Fluentd`。

   ```
   FROM public.ecr.aws/emr-on-eks/fluentd/emr-7.12.0:latest
   USER root
   ### Add customization commands here ####
   USER hadoop:hadoop
   ```

1. 在 `Dockerfile` 中新增命令以自訂基礎映像。下列命令示範如何安裝 Python 程式庫。

   ```
   FROM public.ecr.aws/emr-on-eks/flink/emr-7.12.0-flink:latest
   USER root
   RUN pip3 install --upgrade boto3 pandas numpy // For python 3
   USER hadoop:hadoop
   ```

1. 在您建立 的相同目錄中`DockerFile`，執行下列命令來建置 Docker 映像。您在 `-t`旗標之後提供的 欄位是影像的自訂名稱。

   ```
   docker build -t <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
   ```

## 步驟 3：發佈您的自訂映像
<a name="jobruns-flink-docker-flink-fluentd-publish-image"></a>

您現在可以將新的 Docker 映像發佈到您的 Amazon ECR 登錄檔。

1. 執行下列命令來建立 Amazon ECR 儲存庫以存放 Docker 映像。為您的儲存庫提供名稱，例如 `emr_custom_repo.` 如需詳細資訊，請參閱《Amazon Elastic Container Registry 使用者指南》中的[建立儲存](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-create-repository)庫。

   ```
   aws ecr create-repository \
          --repository-name emr_custom_repo \
          --image-scanning-configuration scanOnPush=true \
          --region <AWS_REGION>
   ```

1. 執行下列命令以驗證預設登錄檔。如需詳細資訊，請參閱《Amazon Elastic Container Registry 使用者指南》中的[驗證您的預設登錄](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry)檔。

   ```
   aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com
   ```

1. 推送映像。如需詳細資訊，請參閱《[Amazon Elastic Container Registry 使用者指南》中的將映像推送至 Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-push-image)。

   ```
   docker push <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
   ```

## 步驟 4：使用自訂映像在 Amazon EMR 中提交 Flink 工作負載
<a name="jobruns-flink-docker-flink-fluentd-submit-workload"></a>

對`FlinkDeployment`規格進行下列變更，以使用自訂映像。若要這樣做，請在部署規格的`spec.image`行中輸入您自己的映像。

```
apiVersion: flink.apache.org/v1beta1
   kind: FlinkDeployment
   metadata:
     name: basic-example
   spec:
     flinkVersion: v1_18
     image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
     imagePullPolicy: Always
     flinkConfiguration:
           taskmanager.numberOfTaskSlots: "1"
```

若要為您的 Fluentd 任務使用自訂映像，請在部署規格的 `monitoringConfiguration.image`行中輸入您自己的映像。

```
  monitoringConfiguration:
       image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
       cloudWatchMonitoringConfiguration:
         logGroupName: flink-log-group
         logStreamNamePrefix: custom-fluentd
```