Drone CIでDockerHubのDownload rate limitを回避するためログインしてイメージをPullするためのメモ。
事前準備
DockerHubのアクセストークンを作成
DockerHubにログインし、Account Settings から Security 、New 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名
以上でステップ用のコンテナイメージは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のドキュメントに明示されていないため、今後とも利用できるかは不明。