異なるプライベート 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
と呼べば良いことになる。楽チン。