IBM Cloud Docs
カスタム Docker イメージの操作

カスタム Docker イメージの操作

2020 年 11 月 20 日に、Dockerhub は匿名イメージ・プルに速度制限を導入しました。 この変更は、Dockerhub をホストとするカスタム・イメージを使用することによってジョブを実行するユーザーに影響する可能性があります。

パイプライン基本イメージは、すべてのビルドの要件をサポートしていないことがあります。 例えば、node、Java、またはその他のツールのバージョンを細かく制御する必要がある場合があります。 この問題に対処するには、一連の新規パッケージをインストールして、環境変数 (PATH など) を慎重に構成して環境をセットアップする最初のステップをパイプライン・ジョブに組み込みます。 しかし、さらに優れた方法は、ジョブの基礎として「カスタム Docker イメージ」を実行するためにパイプラインのサポートを使用することです。

パイプラインのカスタム Docker イメージ・サポートは、特定のパイプライン・ジョブの実行中にそのジョブで使用するイメージを提供するためだけに使用されます。 例えば、ジョブで実行するスクリプトに必要なカスタム・ツールが含まれているイメージを提供できます。 ジョブが完了すると、ジョブが実行されていたコンテナーは破棄されます。

ビルド、テスト、またはデプロイのいずれのジョブ・タイプを使用する場合でも、「カスタム Docker イメージ」サブタイプを選択して、使用する Docker イメージ名を指定し、実行するスクリプトを指定できます。 例えば、Maven 3.5.3 および IBM Java を使用してビルド・ジョブを実行するには、以下のオプションを使用します。

カスタム
*を使用したMavenビルド カスタムイメージ
を使用したMavenビルド

Docker イメージ名の指定

カスタム Docker イメージ・ジョブの Docker イメージ名の動作は、Docker CLI でのイメージ名の動作と同様に設計されています。 Docker イメージ名の形式は、[repository][:][tag] です。 例えば、docker run maven:3.5.3-ibmjava の場合、Docker イメージ名は maven:3.5.3-ibmjava です。ここで、maven はリポジトリー、3.5.3-ibmjava はタグです。 使用できる Docker イメージ名に制限はありません。有効な Docker イメージはすべて機能します。

**「Docker イメージ名」**フィールドが入力されていない場合は、標準のパイプライン基本イメージが使用されます。

デフォルトでは、DockerHub上のリポジトリが検索されます。 IBM Cloud® Container Registry などの別の Docker レジストリーを使用する場合は、完全な DNS 名を使用できます。 また、Docker Hub 上のイメージの完全修飾名を使用することもできます。 例えば、registry.hub.docker.com/library/maven:3.5.3-ibmjava です。

Docker イメージのtagはオプションです。 タグを指定しない場合、デフォルトでlatest に設定されます。 デフォルト値のlatestは、リポジトリー所有者が管理する必要があるタグ名です。 これは、この Docker イメージが発生順で最新のイメージであることを意味するものではありません。

Docker Hub には、リポジトリーの大規模なコミュニティーがあります。 IBM hosts a number of public repositories that the IBM Cloud team uses at https://hub.docker.com/u/ibmcom/. ibmcom/ibmjava リポジトリーと ibmcom/ibmnode リポジトリーは、ビルドに役立ちます。

プライベート・イメージ・レジストリーの使用

認証を必要とするプライベート・レジストリーを使用している場合は、さらに 2 つのステージ環境プロパティー DOCKER_USERNAME および DOCKER_PASSWORD を設定する必要があります。 セキュア・プロパティーを使用して、DOCKER_PASSWORD をマスクできます。 イメージがプルされる前に、カスタム Docker イメージ・ジョブはユーザー名とパスワードの資格情報を使用して docker loginを実行します。

ほとんどのレジストリーでは、提供されたユーザー名とパスワードを使用できます。 IBM Cloud Container Registry を使用してプライベート・イメージを保管する場合は、認証にプラットフォーム API キーを使用する必要があります。

  1. プラットフォームAPIキーをリクエストし、必ずキーを保存してください。

  2. iamapikeyDOCKER_USERNAME を使用し、また、DOCKER_PASSWORD に保存したプラットフォーム API キーを使用して、2 つのステージ環境プロパティーを作成します。

    IBM Cloud Container Registry credentials
    Authentication credentials

スクリプトの指定

カスタム Docker イメージ・ジョブで script ブロックを使用して、通常のパイプライン・ジョブの動作と類似した方法でタスク・フォルダー内で実行されるスクリプト・ファイルを作成できます。

ご使用の Docker イメージの Dockerfile の ENTRYPOINTCMD はオーバーライドされ、呼び出されません。 このため、場合によっては、初期化ステップをスクリプトに追加する必要があります。

カスタム Docker イメージ・ジョブを使用すると、スクリプトをより柔軟に実行できるようになります。具体的には、コマンド・インタープリターを制御できます。 通常、スクリプトの最初の行の先頭が #! とコマンド・インタープリターの名前である場合、そのエントリーを使用してジョブ内のコマンドが実行されます。 コマンド・インタープリターを指定しない場合は、Docker イメージのデフォルト・シェルが使用されます。 通常、#!/bin/bash または #!/bin/sh が使用されます。適切な Docker イメージを指定すれば、awknoderuby のイメージ・コマンド・インタープリターも機能します。