注:筆者は韓国在住のため、本文には韓国特有の文脈が含まれることがあります。
1. Private Registryは便利だけど、管理がとても面倒です!
CLIが大好きな方もいらっしゃいますが、私はコマンドを覚えるのが本当に苦手なので、GUIと記録を好みます。
Docker RegistryもCLIで管理できますが、もう少し楽にするために docker-registry-browser を使います。
このような感じのGUIを使う予定です。


2. インストール
既存のdocker-registry-systemに一緒にインストールします。
既存ファイルの下に --- を追加してから記述してください。
modules/docker-registry-system/deployment.yaml
- 既存のdeployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-registry-ui-deployment
namespace: docker-registry-system
spec:
replicas: 1
selector:
matchLabels:
app: docker-registry-ui-app
template:
metadata:
labels:
app: docker-registry-ui-app
spec:
nodeSelector:
node-type: worker
containers:
- name: docker-registry-ui-pod
image: klausmeyer/docker-registry-browser:1.7.0
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
envFrom:
- secretRef:
name: docker-registry-ui-secrets-sealed-secretsmodules/docker-registry-system/service.yaml
... 既存のservice
---
apiVersion: v1
kind: Service
metadata:
name: docker-registry-ui-service
namespace: docker-registry-system
spec:
selector:
app: docker-registry-ui-app
type: ClusterIP
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080modules/docker-registry-system/ingress.yaml
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: docker-registry-ui-ingress
namespace: docker-registry-system
spec:
tls:
certResolver: le
routes:
- kind: Rule
match: Host(`UIを公開するURLの例:docker-ui.lemon.com`)
services:
- name: docker-registry-ui-service
port: 80加えてBasic Authの設定を行いたい場合は、 Sealed Secretsによるシークレット管理 + Traefik Basic Auth設定 を参考にしてください。
modules/docker-registry-system/sealed-docker-registry-ui-secrets.yaml
sealed secretsのGUIに入って、次のSecretを追加します。(参考Docs Link )
- BASIC_AUTH_USER : registryへのログインに使用するユーザー名
- BASIC_AUTH_PASSWORD : パスワード
- DOCKER_REGISTRY_URL : https://<登録したRegistryのアドレス>
- ENABLE_DELETE_IMAGES : true
- SECRET_KEY_BASE :
openssl rand -hex 64を実行して得られた値
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: docker-registry-ui-secrets
namespace: docker-registry-system
annotations: {}
spec:
encryptedData:
BASIC_AUTH_USER: afdfads...
BASIC_AUTH_PASSWORD: fadvbads..
DOCKER_REGISTRY_URL: dfd..
ENABLE_DELETE_IMAGES: afdgd...
SECRET_KEY_BASE: dffdf...使い方は直感的なので、ぜひご自身で試してみることをおすすめします!
3. Registry GC
Docker Registry UIで画像を削除しても(あるいはCLIで画像を削除しても)、ディスク容量がすぐに減るわけではありません。
これはGUI/CLIで画像を削除する際に、実際の物理削除が起こるのではなく、その画像のManifestのみが削除されるためです。
実際のデータ削除は、Registry GCを明示的に実行したときに行われます。
もっと詳しい話もできますが、今日はとりあえず使い方に焦点を当てているので、詳細は省略します。
(関連する内容についてもう少し気になる方は、透明セロハン理論を通したOverlay FSの使い方とUnion Mount という記事(韓国語)をまず読んでから、Docker registryと画像削除などのキーワードで検索してみると良いと思います。)
- Registry GCを実行する
!! 注意! GCの実行中はリポジトリでPull/Pushが発生してはいけません。これを先に確認してから作業してください!
kubectl get pod -n docker-registry-systemを使って、RegistryのPodを見つけます。kubectl exec -it pod/<registry-pod-name> -n docker-registry-system -- /bin/registry garbage-collect /etc/docker/registry/config.ymlを実行してGCを実行します。- その後、Longhorn DashboardでVolumeを選択 -> Trim Filesystemを押して、Actual Sizeを再計算してもらいます。
4. おわりに
これを通してDocker UI、GCの方法について見てきました。
これでPrivate Registryと管理方法ができたので、安心してサーバーを開発(?)して、お好みのサーバーを入れることができます!
次回はCloudNativePGを使ってKubernetes上でデータベースを動かす方法について見ていきます。

Comments