コンテントトラストの自動化
既存の自動化システムに Docker コンテントトラストを組み入れて構築することは、ごく普通に行われています。 そのシステムから Docker を通じ、信頼できるコンテントをプッシュできるようにするために、環境変数が用意されています。 これがクライアントに受け渡されます。
本節では DCT によるイメージへのサイン に示した手順を行っているものとします。 したがってその内容はよく読んで、前提条件を理解しておいてください。
Notary クライアントを直接操作する場合は、独自の環境変数のセット を利用します。
委任鍵ペアの秘密鍵の追加
ローカルの Docker トラストの保存場所に向けて、委任鍵ペアの秘密鍵のインポートを自動化するには、新たな鍵に対するパスフレーズを与える必要があります。 このパスフレーズは、委任鍵ペアによってタグにサインを行う際に、毎回必要となるものです。
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
$ docker trust key load delegation.key --name jeff
Loading key from "delegation.key"...
Successfully imported key from delegation.key
委任鍵ペアの公開鍵の追加
リポジトリを初期化する際には、同時に委任鍵ペアの公開鍵の登録を行います。 その後にリポジトリ内にトラストデータを生成するわけですが、その際にはローカルの Notary 標準ルート鍵のパスフレーズが必要になります。 リポジトリをすでに初期化済みであれば、リポジトリのパスフレーズだけが必要になります。
# Export the Local Root Key Passphrase if required.
$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"
# Export the Repository Passphrase
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"
# Initialise Repo and Push Delegation
$ docker trust signer add --key delegation.crt jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
Initializing signed repository for registry.example.com/admin/demo...
Successfully initialized "registry.example.com/admin/demo"
Successfully added signer: registry.example.com/admin/demo
イメージへのサイン
最後に、イメージへのサインを行うには、サインする鍵のパスフレーズを環境変数に設定することが必要です。
docker trust key load
を実行していますから、ローカルの Docker トラストの保存場所に、すでに鍵はロードされ生成されています。
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
$ docker trust sign registry.example.com/admin/demo:1
Signing and pushing trust data for local image registry.example.com/admin/demo:1, may overwrite remote trust data
The push refers to repository [registry.example.com/admin/demo]
428c97da766c: Layer already exists
2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Signing and pushing trust metadata
Successfully signed registry.example.com/admin/demo:1
コンテントトラストを使ったイメージビルド
イメージをビルドする際に、コンテントトラストを利用することもできます。
docker build
コマンドを実行する前に、環境変数DOCKER_CONTENT_TRUST
を手動で設定しておくか、あるいはスクリプトを用意して設定します。
以下のような単純な Dockerfile を例にして説明します。
# syntax=docker/dockerfile:1
FROM docker/trusttest:latest
RUN echo
FROM
タグによって、サイン済みのイメージをプルします。
FROM
に指定されたイメージがローカルに存在しない場合、あるいはサインされていない場合、そのイメージをビルドすることはできません。
latest
タグに対するコンテントトラストデータがある場合、以下のビルドは成功します。
$ docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest
b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871
コンテントトラストが有効である場合、トラストデータを用いていない Dockerfile によってビルドを行うと、ビルドコマンドは失敗します。
$ docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust