Dockerイメージの作成
measurementプロジェクトのアプリケーション開発における、Dockerイメージの作成について説明します。
デバイスコネクターの開発 で作成したプラグインおよびパイプライン設定ファイルを含めたDockerイメージを作成し、コンテナレジストリへpushする方法を説明します。 また、デバイスコネクターサービスファイルを作成し、作成したDockerイメージを使ってエッジコンピューターで計測の動作確認を行います。
コンテナレジストリの準備
Dockerイメージを保存するため、Docker Hub、Amazon Elastic Container Registry(ECR)、Google Container Registry(GCR)などのコンテナレジストリの準備が必要です。
あらかじめ、イメージを保存するためのリポジトリを作成してください。
また、プライベートリポジトリの場合は、事前に docker login
または Docker Credential Helpers を利用してログインしてください。
Dockerfileの作成
Terminal System 2の推奨開発方法では、以下の点を考慮してDockerfileを作成する必要があります。
- ベースイメージ
FROM
で、使用するベースイメージを指定します。 device-connector-intdashの動作要件を満たしている、debian
やubuntu
をベースイメージにしたイメージを選択してください。- device-connector-intdashパッケージのインストール
aptリポジトリの設定を行いdevice-connector-intdashパッケージをダウンロードおよびインストールします。
- プラグインおよびパイプライン設定ファイルのコピー
プラグインおよびパイプライン設定ファイルをDockerイメージに含めます。
以下に、 ubuntu:22.04
ベースイメージを利用し、前章の デバイスコネクターの開発 でビルドしたプラグインやパイプライン設定ファイルを含むDockerfileを作成する例を示します。
前章で作成したプロジェクトディレクトリに移動します。
$ cd custom
プロジェクトのディレクトリに
Dockerfile.image
ファイルを以下の内容で作成します。FROM ubuntu:22.04 AS download # setup intdash-edge repository RUN apt-get update && apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ lsb-release \ && apt-get clean && rm -rf /var/lib/apt/lists/* RUN mkdir -p /etc/apt/keyrings RUN curl -fsSL https://repository.aptpod.jp/intdash-edge/linux/ubuntu/gpg | \ gpg --dearmor -o /etc/apt/keyrings/intdash-edge.gpg RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/intdash-edge.gpg] \ https://repository.aptpod.jp/intdash-edge/linux/ubuntu \ $(lsb_release -cs) \ stable" \ | tee /etc/apt/sources.list.d/intdash-edge.list # download latest device-connector-intdash package RUN apt-get update && apt-get download device-connector-intdash \ && apt-get clean && rm -rf /var/lib/apt/lists/* FROM ubuntu:22.04 COPY --from=download /device-connector-intdash_*.deb / # install device-connector-intdash RUN apt-get update && apt-get install -y --no-install-recommends \ /device-connector-intdash_*.deb \ && rm -f /device-connector-intdash_*.deb \ && apt-get clean && rm -rf /var/lib/apt/lists/* # copy plugins COPY target /files ARG TARGETPLATFORM RUN case ${TARGETPLATFORM} in \ "linux/amd64") export TARGET="x86_64-unknown-linux-gnu" ;; \ "linux/arm64") export TARGET="aarch64-unknown-linux-gnu" ;; \ "linux/arm/v7") export TARGET="armv7-unknown-linux-gnueabihf" ;; \ esac \ && cp /files/$TARGET/release/libdc_*.so /usr/local/lib/ \ && rm -rf /files # copy config COPY conf/*.yml /etc/dc_conf/custom/ ENTRYPOINT ["/usr/bin/device-connector-intdash"]
以下に、Dockerfileの内容を説明します。
FROM ubuntu:22.04 AS download
FROM
でベースイメージに ubuntu:22.04
を指定しています。
実行時に不要なパッケージを除外するため、マルチステージビルドを行います。
device-connector-intdashパッケージをダウンロードするため、 AS download
でdownloadステージとしてビルドします。
# setup intdash-edge repository
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
lsb-release \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://repository.aptpod.jp/intdash-edge/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/intdash-edge.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/intdash-edge.gpg] \
https://repository.aptpod.jp/intdash-edge/linux/ubuntu \
$(lsb_release -cs) \
stable" \
| tee /etc/apt/sources.list.d/intdash-edge.list
ubuntu
向けに、device-connector-intdashパッケージのaptリポジトリを設定しています。
# download latest device-connector-intdash package
RUN apt-get update && apt-get download device-connector-intdash \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
ビルド時点で最新のdevice-connector-intdashをダウンロードします。
最新のTerminal System 2向けに開発する場合は最新バージョンで問題ありません。古いバージョンを指定する場合は、 device-connector-intdash=<バージョン>
としてください。
FROM ubuntu:22.04
COPY --from=download /device-connector-intdash_*.deb /
新しいステージを作成し、downloadステージでダウンロードしたdevice-connector-intdashパッケージをコピーします。
# install device-connector-intdash
RUN apt-get update && apt-get install -y --no-install-recommends \
/device-connector-intdash_*.deb \
&& rm -f /device-connector-intdash_*.deb \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
device-connector-intdashパッケージをインストールします。
--no-install-recommends
を指定して、実行に必須ではない推奨パッケージのインストールを省いています。
警告
no-install-recommends
を指定した場合、推奨パッケージを利用する以下のエレメントを利用できません。
これらのエレメントをパイプラインで利用したい場合は、aptリポジトリ設定を行い --no-install-recommends
を指定せずにdevice-connector-intdashをインストールしてください。
apt-analogtrx-src
apt-cantrx-src
h264-split-filter
pcm-split-filter
apt-cantrx-sink
# copy plugins
COPY target /files
ARG TARGETPLATFORM
RUN case ${TARGETPLATFORM} in \
"linux/amd64") export TARGET="x86_64-unknown-linux-gnu" ;; \
"linux/arm64") export TARGET="aarch64-unknown-linux-gnu" ;; \
"linux/arm/v7") export TARGET="armv7-unknown-linux-gnueabihf" ;; \
esac \
&& cp /files/$TARGET/release/libdc_*.so /usr/local/lib/ \
&& rm -rf /files
ターゲットプラットフォームに応じて、ビルドしたプラグインを /usr/loca/lib/
にコピーします。
TARGETPLATFORM
は、後述するDockerイメージのビルド時に値を設定します。
# copy config
COPY conf/*.yml /etc/dc_conf/custom/
conf/*.yml
にあるパイプライン設定ファイルを、 /etc/dc_conf/custom/
にコピーします。
ENTRYPOINT ["/usr/bin/device-connector-intdash"]
実行ファイルとしてdevice-connector-intdashを指定します。
イメージのビルドとpush
Docker Buildx を利用して、以下の手順でマルチプラットフォームのイメージをビルドします。
前章で作成したプロジェクトディレクトリに移動します。
$ cd custom
QEMUのユーザースペースエミュレーションを設定します。
$ docker run --privileged --rm tonistiigi/binfmt --install all
ビルダーインスタンスを作成します。
$ docker buildx create --use --name mybuild
Dockerイメージをビルドします。 タグを指定しない場合、イメージはビルドキャッシュにのみ保存されます。
--file
使用するDockerfileのファイル名を指定します--platform
ビルド対象のプラットフォームを指定します(複数指定可能)--pull
ビルド前にベースイメージをpullします
例: linux/arm64 プラットフォーム向けにビルドする場合
$ docker buildx build \ --file Dockerfile.image \ --platform linux/arm64 \ --pull \ .
注釈
エッジコンピューターのアーキテクチャは、エッジコンピューターで
uname -m
コマンドを実行すると確認できます。 ターゲットアーキテクチャとuname -m
コマンドの対応関係は以下のとおりです。linux/arm64:
aarch64
linux/arm/v7:
armv7l
linux/amd64:
x86_64
Dockerイメージがビルドできることが確認できたら、レジストリにpushします。
DockerHubの場合、イメージ名( <image name> )はユーザー名/リポジトリ名の形式で指定します。
例: username/hello-custom
--push
ビルド後にイメージをpushします--tag
イメージ名とタグを指定します
$ export IMAGE=<image name>:<tag> $ docker buildx build \ --file Dockerfile.image \ --platform linux/arm64 \ --pull \ --push \ --tag $IMAGE \ .
注意
計測時に利用するDockerイメージを固定したい場合はバージョンを示すタグを、 常に最新のバージョンを利用したい場合は
latest
などのタグを指定することを推奨します。
アーカイブの作成 (プライベートリポジトリ利用時のみ)
プライベートリポジトリを利用する場合、本番環境にデプロイするためにアーカイブを作成する必要があります。
注釈
プライベートリポジトリを利用しない場合は本手順は実施不要です。
また、プライベートリポジトリ利用していても、開発時の場合は docker login
または Docker Credential Helpers を利用してログインするため、本手順の実施は任意です。
アーカイブを作成するには以下の2つの方法があります。
手動でアーカイブを作成する
プリインストールイメージの設定を追加した後、OS開発の
setup_layer.sh
スクリプトを実行する ( OS開発 を参照 )
ここでは、手動でアーカイブを作成する方法を説明します。
前手順でレジストリにpushしたマルチアーキテクチャイメージのダイジェスト値(
"digest"
)を確認します。$ export IMAGE_NAME=<image name> $ export IMAGE=${IMAGE_NAME}:<tag> $ docker manifest inspect $IMAGE
例:
linux/arm64:
sha256:d0c85457494c692bc53a61377cbf6568a35df08385fcc492353b0bd40ada1bc1
{ "mediaType": "application/vnd.oci.image.manifest.v1+json", "size": 1440, "digest": "sha256:d0c85457494c692bc53a61377cbf6568a35df08385fcc492353b0bd40ada1bc1", "platform": { "architecture": "arm64", "os": "linux" } }
アーカイブを作成したいアーキテクチャのダイジェストを利用して、イメージをpullします。
例:
linux/arm64のダイジェストを利用してpull
$ export DIGEST="sha256:d0c85457494c692bc53a61377cbf6568a35df08385fcc492353b0bd40ada1bc1" $ docker pull ${IMAGE_NAME}@${DIGEST}
pullしたイメージにタグを付けます。
$ export IMAGE_ID=$(docker images --digests | grep ${DIGEST} | head -n 1 | awk {'print $4'}) $ docker tag $IMAGE_ID $IMAGE
アーカイブを作成します。名称は任意ですが、イメージ名とタグを含めることを推奨します。
$ docker save ${IMAGE} | gzip > "<image name>_<tag>.tar.gz"
作成したプライベートリポジトリのDockerイメージのアーカイブは、 アーティファクトの作成 でエッジコンピューターにイメージをデプロイする際に利用します。
イメージの動作確認
エッジコンピューターにログインし、Dockerイメージを利用したコンテナが動作することを確認します。
プライベートリポジトリの場合は、事前に docker login
または Docker Credential Helpers を利用してログインしてください。
重要
プライベートリポジトリを利用する場合、開発時の動作確認を除いて、本番環境で認証情報をエッジデバイスに保存することは避けてください。認証情報が漏洩した場合、悪意のあるユーザーが不正にアクセスする可能性があります。
本番環境のエッジコンピューターにプライベートリポジトリのDockerイメージをデプロイする場合は、Dockerイメージをアーカイブ化したものをプリインストールイメージに含めるか、アプリケーションアップデートアーティファクトに含めてデプロイする方法を推奨します。詳細については、 アーティファクトの作成 を参照してください。
エッジコンピューターで、イメージをpullします。
$ export IMAGE=<image name>:<tag> $ docker pull $IMAGE
デバイスコネクターの開発 で作成したパイプライン設定ファイル
custom-text-hexdump.yml
を指定し、device-connector-intdashを実行します。 カスタムインベントリを送信する場合は、-v
オプションで/var/run/device-inventory/custom.d
をバインドマウントします。$ docker run --rm \ --env "DC_TEXT=Hello, world!" \ -v /var/run/device-inventory/custom.d:/var/run/device-inventory/custom.d \ "$IMAGE" --config /etc/dc_conf/custom/custom-text-hexdump.yml [2023-05-11T09:51:36Z INFO device_connector_common] dc_init() (dc_custom) [2023-05-11T09:51:36Z INFO device_connector::process] start background processes [2023-05-11T09:51:36Z INFO device_connector::process] execute before script [2023-05-11T09:51:36Z INFO dc_intdash::basetime] clock id is "CLOCK_MONOTONIC" [2023-05-11T09:51:36Z INFO device_connector::runner] spawn task 3 msg = 1F 95 00 00 27 1A 9A 26 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F msg = 1F 95 00 00 15 96 92 2C 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F msg = 1F 95 00 00 64 A3 8A 32 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F msg = 1F 95 00 00 72 65 83 38 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F msg = 20 95 00 00 40 F5 E0 02 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F msg = 20 95 00 00 8F FA D8 08 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F msg = 20 95 00 00 7E FA D0 0E 06 00 0B 00 05 00 00 00 73 74 72 69 6E 67 63 75 73 74 6F 6D 5F 74 65 78 74 48 65 6C 6C 6F
環境変数
DC_TEXT=Hello
で指定した文字列が、string型のiscp-v2-compatフォーマットに変換され、16進数でダンプ出力されることが確認できました。カスタムインベントリを作成している場合は、以下のファイルが生成されます。カスタムインベントリは、Menderサーバーへのインベントリ送信や、Device Inventoryデバイスコネクターサービスでintdashサーバーに送信されます。
$ cat /var/run/device-inventory/custom.d/custom-text {"text": "Hello, world!"}
デバイスコネクターサービスファイルの作成
measurementプロジェクトのコンテナとして動作させるため、デバイスコネクターサービスファイルを作成します。
例として、
Custom Text.yml
という名前のデバイスコネクターサービスファイルを作成します。以下の内容を記述してください。image: <image name>:<tag> command: - --config - "/etc/dc_conf/custom/custom-text.yml" depends_on: intdash-edge-agent2: condition: service_healthy volumes: - /var/run/core/intdash:/var/run/intdash - /var/run/device-inventory/custom.d:/var/run/device-inventory/custom.d restart: unless-stopped environment: DC_FILE_SINK_CONF_PATH: ${DC_UPSTREAM_FIFO_0} DC_PRINT_LOG_FILTER_CONF_TAG: ${DC_TAG} DC_TEXT: ${DC_TEXT} substitution_variables: - key: DC_UPSTREAM_FIFO_0 default: "" validation: "^/var/run/intdash/" display_strings_i18n: - locale: jpn name: FIFO Path description: intdash Edge Agent 2へデータを送信するためのFIFOのパス - key: DC_TAG default: "" display_strings_i18n: - locale: jpn name: Tag description: このデバイスコネクターのログを表示するときに使用するタグ - key: DC_TEXT default: "Hello, world!" display_strings_i18n: - locale: jpn name: Text description: テキスト
上記のデバイスコネクターサービスの内容を説明します。
image: <image name>:<tag>
image
で、使用するコンテナリポジトリのイメージを指定します。command: - --config - "/etc/dc_conf/custom/custom-text.yml"
command
で、実行ファイル(device-connector-intdash)の引数を指定します。 ここでは、intdash Edge Agent2にデータを送信する際に利用するパイプライン設定ファイルcustom-text.yml
を指定します。depends_on: intdash-edge-agent2: condition: service_healthy volumes: - /var/run/core/intdash:/var/run/intdash - /var/run/device-inventory/custom.d:/var/run/device-inventory/custom.d
depends_on
で、intdash Edge Agent2が起動してから、デバイスコネクターを起動するように設定します。volumes
で、intdsah Edge Agent2とFIFOで通信をするためにバインドマウントを設定します。 カスタムインベントリを送信する場合は、/var/run/device-inventory/custom.d
をバインドマウントします。これらの設定は、measurementプロジェクトのコンテナでは必ず追加してください。
restart: unless-stopped
デバイスコネクターがエラー終了した場合に、再起動する設定を指定します。
environment: DC_FILE_SINK_CONF_PATH: ${DC_UPSTREAM_FIFO_0} DC_PRINT_LOG_FILTER_CONF_TAG: ${DC_TAG} DC_TEXT: ${DC_TEXT} substitution_variables: - key: DC_UPSTREAM_FIFO_0 default: "" validation: "^/var/run/intdash/" display_strings_i18n: - locale: jpn name: FIFO Path description: intdash Edge Agent 2へデータを送信するためのFIFOのパス - key: DC_TAG default: "" display_strings_i18n: - locale: jpn name: Tag description: このデバイスコネクターのログを表示するときに使用するタグ - key: DC_TEXT default: "Hello, world!" display_strings_i18n: - locale: jpn name: Text description: テキスト
environment
に、パイプライン設定ファイルに記載した環境変数を記載してください。 値にsubstitution_variables
で定義した置換変数を設定すると、コミット操作時にデバイスコネクター設定で与えた設定値で置換されます。以下の置換変数については、Terminal System APIが自動生成するため、デバイスコネクター設定での指定は不要です。
アップストリーム用のFIFOパス
DC_UPSTREAM_FIFO_%d
(%dには数値が入ります)ダウンストリーム用のFIFOパス
DC_DOWNSTREAM_FIFO_%d
(%dには数値が入ります)ログ表示用のタグ
DC_TAG
設定項目の詳細については、 Terminal System API ドキュメント の Device Connector Service を参照してください。
注釈
コンテナ内でデバイスを利用する場合は、
devices
フィールドでデバイスを指定してください。devices: - /dev/ttyUSB0:/dev/ttyUSB0
デバイスへのアクセスに権限が必要な場合や、デバイスの活性挿抜に対応する必要がある場合は
devices
フィールドは利用せず、以下のようにprivileged: true
や/dev:/dev
のバインドマウントを設定してください。privileged: true volumes: - /dev:/dev
作成したファイルをエッジコンピューターの以下のパスに配置します。
/var/lib/core/docker-compose/measurement/services/Custom\ Text.yml
以下のようにTerminal System APIを呼び出すか、Mender Web UIにアクセスし、デバイス画面の[Inventory]タブで、 device_connector_servicesを確認して、
Custom Text
デバイスコネクターサービスが追加されたことを確認します。# curl -fSs http://localhost:8081/api/device_connector_services \ | jq '.[] | select(.service_id == "Custom Text")' { "service_id": "Custom Text", "substitution_variables": [ { "key": "DC_UPSTREAM_FIFO_0", "default": "", "validation": "^/var/run/intdash/", "display_strings_i18n": [ { "locale": "jpn", "name": "FIFO Path", "description": "intdash Edge Agent 2へデータを送信するためのFIFOのパス" } ] }, { "key": "DC_TAG", "default": "", "display_strings_i18n": [ { "locale": "jpn", "name": "Tag", "description": "このデバイスコネクターのログを表示するときに使用するタグ" } ] }, { "key": "DC_TEXT", "default": "Hello, world!", "display_strings_i18n": [ { "locale": "jpn", "name": "Text", "description": "テキスト" } ] } ], "protected": false, "absolute_path": "/var/lib/core/docker-compose/measurement/services/Custom Text.yml" }
Dockerイメージを使った計測
追加した Custom Text
デバイスコネクターサービスで計測ができることを確認します。
事前に、エッジコンピューターで以下の設定が済んでいることを確認してください。
intdashサーバー接続設定
アップストリーム設定
デバイスコネクターIPC設定で、
custom
設定を追加します。Mender Web UIにアクセスし、デバイス画面の[Configuration]タブで、
agent.device_connectors_upstream
に以下を設定してください。例:
[ { "id": "device-inventory", "data_name_prefix": "v1/255/", "dest_ids": [ "default-upstream" ], "format": "iscp-v2-compat" }, { "id": "custom", "data_name_prefix": "v1/3/", "dest_ids": [ "default-upstream" ], "format": "iscp-v2-compat" } ]
デバイスコネクター設定で、デバイスコネクターサービス
Custom Text
を利用する設定を追加します。Mender Web UIにアクセスし、デバイス画面の[Configuration]タブで、
device_connectors
に以下を設定してください。例:
[ { "id": "device-inventory", "upstream_ipc_ids": [ "device-inventory" ], "downstream_ipc_ids": [], "service_id": "Device Inventory", "service_substitutions": [] }, { "id": "custom", "upstream_ipc_ids": [ "custom" ], "downstream_ipc_ids": [], "service_id": "Custom Text", "service_substitutions": [ "DC_TEXT=Custom Text" ] } ]
設定をエッジコンピューターに適用し、計測を開始します。
追加した
Custom Text
デバイスコネクターサービスの動作を確認します。Edge Finderで、デバイスコネクター設定の
DC_TEXT
で指定した文字列が送信されることを確認します。カスタムインベントリが、intdashサーバーおよびMenderサーバーに送信されることを確認します。
開発したDockerイメージを利用して計測をすることができました。
動作確認後、計測を停止します。
この手順ではサンプルを利用して動作確認を行いましたが、独自のエレメントのプラグインを作成することで、用途に応じたデータ送受信処理の実装が可能です。
独自エレメントの開発については、 デバイスコネクターデベロッパーガイド を、開発に役立つ情報については Tips を参考にしてください。
Docker Credential Helpers
プライベートリポジトリを利用してDockerイメージを開発する場合、 docker login
コマンドを手動で実行することが非効率な場合があります。
その場合は、 Docker Credential Helpers を利用することで、 docker login
を使用せずにイメージをpush、pullすることが可能です。
Dockerイメージの開発中など、Dockerイメージの更新が頻繁に発生する場合に利用することを推奨します。
Terminal System 2は、プライベートリポジトリ向けに Amazon ECR Docker Credential Helper をインストールしています。
注意
Terminal System 2でECR以外のプライベートリポジトリを利用する場合は、別途 OS開発 で Credential Helper を追加する必要があります。
Amazon ECR Docker Credential Helperを利用するためには、AWSの認証情報を設定する必要があります。 ここでは、ラッパースクリプトを利用して設定する方法を説明します。
以下のファイルを準備します。
- /usr/bin/docker-credential-ecr-login-<任意の名前>
docker-credential-ecr-loginのラッパースクリプトです。 以下の環境変数を設定してdocker-credential-ecr-loginを呼び出します。プロファイルを複数利用する場合は、複数用意します。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
- ~/.docker/config.json (Terminal System 2の場合は /home/root/.docker/config.json)
dockerの認証設定です。 credHelpersにECRのURLを設定します。
以下に、開発用PCおよびTerminal System 2共通の設定例を示します。 開発用PCには、あらかじめ Amazon ECR Docker Credential Helper をインストールしてください。
必要なプロファイル分だけ、
/usr/bin/docker-credential-ecr-login-<任意の名前>
を作成します。 スクリプト内ではAWSアカウントの認証に必要な環境変数を設定してください。例:
#!/bin/bash export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY docker-credential-ecr-login "$@"
作成したスクリプトに実行権限を付けてください。
# chmod +x /usr/bin/docker-credential-ecr-login-*
dockerの認証設定
~/.docker/config.json
にcredHelpers
設定を作成します。 ECRレジストリ<aws_account_id>.dkr.ecr.<region>.amazonaws.com
に対して、対応するラッパースクリプトの名前/usr/bin/docker-credential-ecr-login-<任意の名前>
を指定します。例:
ECRレジストリ
111111111111.dkr.ecr.ap-northeast-1.amazonaws.com
に対して、/usr/bin/docker-credential-ecr-login-sample1
を利用ECRレジストリ
222222222222.dkr.ecr.us-east-1.amazonaws.com
に対して、/usr/bin/docker-credential-ecr-login-sample2
を利用
{ "credHelpers": { "111111111111.dkr.ecr.ap-northeast-1.amazonaws.com": "ecr-login-sample1", "222222222222.dkr.ecr.us-east-1.amazonaws.com": "ecr-login-sample2" } }
ECRのイメージを含む docker-compose.yml を作成し、
docker login
不要でpullできることを確認します。version: '3' services: sample1: image: 111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/sample1:latest sample2: image: 222222222222.dkr.ecr.us-east-1.amazonaws.com/sample2:latest
# docker compose pull
次章では、デバイスにデプロイするファイルを含めたアプリケーションアップデートアーティファクトを作成し、Menderサーバーにアップロードしてリリースとして管理する方法を説明します。