画像

Updated 2 years ago by Admin

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

   1  kind: pipeline
2 type: kubernetes
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にイメージを自動的にプルするように指示します。 Dockerイメージを手動でダウンロードまたはインストールする必要はありません。

画像に最新のタグが付けられている場合、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クレデンシャルをドローンに提供する必要があります。シークレットは、ウェブインターフェイスのリポジトリ設定画面で管理できます。

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

{
"auths": {
"docker.io": {
"auth": "4452D71687B6BC2C9389C3..."
}
}
}

次に、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)からプライベートイメージをプルする場合は、レジストリクレデンシャルプラグインをインストールする必要があります。

画像のキャッシュ動作

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

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


How did we do?