使用內容信任自動化

Docker 內容信任通常會內建到現有的自動化系統中。為了允許工具包裝 Docker 並推送受信任的內容,可以將環境變數傳遞給用戶端。

本指南遵循使用 Docker 內容信任簽署映像檔中所述的步驟。確保您理解並遵循先決條件。

直接使用 Notary 用戶端時,它會使用其自身的環境變數集新增委派私鑰

要將委派私鑰自動匯入到本機 Docker 信任儲存區,我們需要為新鑰匙傳遞一個密碼。每次委派簽署標籤時都需要此密碼。

新增委派公鑰

如果您在新增委派公鑰的同時初始化儲存庫,則需要使用本機 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"

# Initialize 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