以前 「自分用の Docker Registry を作る」 という記事で、自分用のプライベートリポジトリを作成し、長らく便利に使っていました。
Docker の registry コンテナも V2.0 になって久しく、push/pull の度に「v1 api は古いよ!」と余計なおせっかいを焼いてくる始末。
そろそろ V2 に移行しようかといった作業時のメモです。
記載時点(Feb.07.2016) での情報となります。
問題点
Docker イメージとして提供されている registry (v1) と registry:2 (v2) の間にデータの互換性はなく、リポジトリデータを永続化していてもそれを流用することができません。
なので、旧リポジトリのデータをバックアップし、真っ新な v2 のリポジトリを作ったうえで再登録するといったお引っ越し作業が必要になります。
手順
更新するプライベートリポジトリサーバーとは別に、イメージをいったん全部対比させる Docker ホストを 1つ用意します。
全イメージをコピーする先ですのでストレージの空き容量にご注意ください。
- リポジトリ上のイメージ名一覧を取得
- 退避先 Docker ホストで全 image を 1つずつ pull
- プライベートリポジトリを v2 に更新
- 退避先 Docker ホストから全 image を 1つずつ push
なんのことはないこれだけの地味な作業です。
v2 リポジトリを新サーバーとして刷新した場合、マシン名(URL)が異なると「そのままpushするだけ」ができなくなりますのでご注意ください。
注意点
全イメージ名の取得法
registry API の search でイメージ名を取得しても良いのですが、ボリュームで永続化している場合は 'repository/library/' 以下のイメージディレクトリ名を一覧として使えます。
registry v2 の永続化
v1 の時は registry 内のディレクトリポイント /tmp/registry
をボリュームにすることで永続化をしていました。
v2 で同様にするためのディレクトリポイントは /var/lib/registry
になります。
早期では /tmp/registry-dev
だった事があるらしく、WEBを検索すると引っかかりますが。現在は /var/lib/registry
となっているようです。
参照: https://docs.docker.com/registry/deploying/