十 月
24
土曜日
2020

Drone CIでDockerHubにログインしてイメージをPullする

Drone CIでDockerHubのDownload rate limitを回避するためログインしてイメージをPullするためのメモ。


事前準備

DockerHubのアクセストークンを作成

DockerHubにログインし、Account Settings から SecurityNew Access Token でDroneからログインする際に使用するアクセストークンを払い出す。

認証用トークンの作成

ユーザ名とアクセストークンを : で結合、base64コマンドで符号化し認証用トークンを作成する。

echo -n '<ユーザ名>:<アクセストークン>' | base64

DroneのSectesを作成

Droneのリポジトリ設定からdockerのconfig.jsonをSecretsとして定義する。
SecretNameは任意の名前(本記事では dockerconfig とする)、SecretValueには以下のようにconfig.jsonを指定する。

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "<作成した認証トークン>"
    }
  }
}

パイプラインステップ用コンテナイメージのPull

.drone.yml のパイプライン定義に以下の設定を追加する。

image_pull_secrets:
- dockerconfig #config.jsonを登録したSecret名

参考:Pulling Private Images

以上でステップ用のコンテナイメージはDockerHubにログイン状態でPullされるようになる。

AWS ECRプラグインでDockerビルドする際のイメージのPull

drone-ecr はDrone上でコンテナをビルドしAmazon ECRへPushしてくれるプラグインだが、コンテナのビルドをDocker-in-Dockerで行うため前述のログイン状態は適用されない。

ビルド対象コンテナのベースイメージがDockerHubにある場合などは以下の設定を追加することでログイン状態でPullされるようになる。

steps:
- name: build
  image: plugins/ecr
  settings:
    config:
      from_secret: dockerconfig #config.jsonを登録したSecret名

なおこのconfigパラメータでconfig.jsonを渡す方法はdrone-ecrのドキュメントに明示されていないため、今後とも利用できるかは不明。