異なるプライベート Docker レジストリを切り替えるには
プライベート Docker レジストリを使う際、$ docker login コマンドでそのレジストリにログインするワケだが、プライベート Docker レジストリが複数ある場合に、どうやって切り替えるか。
そもそも $ docker login している状況はどこに保持されているのかというと、~/.docker/config.json というファイルに記録されていた。中身はこんな感じ (一例)。
{
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.2 (darwin)"
},
"credsStore": "osxkeychain"
}
MacOS 環境で確認したので、credsStore には osxkeychain と記載されていた。つまり「キーチェーンアクセス.app」に認証情報を記録しているのだ。
そこで「キーチェーンアクセス.app」を見てみると「Docker Credentials」という項目があったのだが、記録されている内容は最後に $ docker login を叩いたアカウント情報だけだった。
色々調べたけど、複数の Docker レジストリをサクッと切り替える方法はなく、以下のようにそれぞれの環境に docker login するエイリアスを複数用意するしかなさそうだった。
# dev : 開発環境、みたいなテイ
alias docker-dev='echo '\''xxxxx'\'' | docker login my-docker-registry-dev.io -u my-user-name --password-stdin'
# prd : 本番環境、みたいなテイ
alias docker-prd='echo '\''yyyyy'\'' | docker login my-docker-registry-prd.io -u my-user-name --password-stdin'
いつものとおり、シングルクォートを '\'' とエスケープしている。ただ docker login コマンドを叩いているだけ…。
コレを ~/.bashrc にでも書けば良いが、パスワードがベタ書きになってしまう。どこかにパスワードを記載したファイルを置いておいて cat するとか、docker login コマンドを叩くだけの独自コマンドを別途作ってそこに逃がすか、といったところか。
とりあえずこうしておけば、開発環境に Docker イメージを Push する際は $ docker-dev → $ docker push と呼べば良いことになる。楽チン。