画像

Updated 2 years ago by Admin

パイプラインステップは、一連のDockerコンテナとして定義されます。したがって、各ステップで、コンテナの作成に使用されるDockerイメージを定義する必要があります。

1   kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: build
7 image: golang:1.12
8 commands:
9 - go build
10 - go test

Droneは、Dockerレジストリからの有効なDockerイメージをサポートします。

image: golang
image: golang:1.7
image: library/golang:1.7
image: index.docker.io/library/golang
image: index.docker.io/library/golang:1.7
image: docker.company.com/golang


画像のプル

イメージがローカルキャッシュに存在しない場合、DroneはDockerにイメージを自動的にプルするように指示します。手動で画像をプルする必要はありません。

イメージが明示的または暗黙的に:latestでタグ付けされている場合、イメージがローカルキャッシュに存在する場合でも、Droneはリモートレジストリからイメージの最新バージョンをプルしようとします。

ローカルキャッシュに見つからない場合にのみイメージをプルするには:

5 steps:
6 - name: build
7 pull: if-not-exists
8 image: golang

常に最新バージョンのイメージをプルするには:

5 steps:
6 - name: build
7 pull: always
8 image: golang:1.12

イメージをプルせず、常にローカルキャッシュ内のイメージを使用するには:

5 steps:
6 - name: build
7 pull: never
8 image: golang:1.12

プライベート画像のプル

画像がプライベートの場合は、シークレットから取得したDockerクレデンシャルをDroneに提供する必要があります。シークレットは、ウェブインターフェースのリポジトリ設定画面で管理できます。

まず、Docker config.jsonファイルの形式でDockerクレデンシャルを含むシークレットを作成します。このファイルは、複数のレジストリの資格情報を提供する場合があります。

1  {
2 "auths": {
3 "docker.io": {
4 "auth": "4452D71687B6BC2C9389C3..."
5 }
6 }
7 }

image_pull_secrets属性を使用して、プライベートイメージをプルするために使用するシークレットを定義します。

5   steps:
6 - name: build
7 image: registry.internal.company.com/golang:1.12
8 commands:
9 - go build
10 - go test
11
12 image_pull_secrets:
13 - dockerconfig

Amazon Elastic Container Registry(ECR)からプライベートイメージをプルする場合は、レジストリクレデンシャルプラグインをインストールする必要があります。

Googleコンテナレジストリの問題

gcr.iohttps://gcr.io両方のエントリがある場合はhttps://プレフィックスが付いたエントリを削除する必要があります。そうしないと、次のエラーメッセージが断続的に表示されます。

デフォルト:デーモンからのエラー応答:許可されていません:この操作を実行するために必要な権限がなく、無効な資格情報を持っている可能性があります。リクエストを認証するには、 https://cloud.google.com/container-registry/docs/advanced-authenticationの手順に従います。


画像のキャッシュ動作

Dockerデーモンは、プライベートイメージを含む、プルされるすべてのイメージをキャッシュします。 Dockerは、キャッシュされたイメージの使用を制限しません。すでにローカルキャッシュにある画像は、どのパイプラインでも使用できます。

したがって、パイプラインがDockerによってキャッシュされたプライベートイメージをプルし、別のパイプラインが資格情報なしでキャッシュからこのイメージを使用する可能性があります。共有環境またはパブリック環境でプライベートイメージをプルする場合は、このことに注意してください。


How did we do?