Introduction

Dockerイメージを保存するプライベートなDocker RegistryをSynology NASに構築したのでメモ。
Docker Registryもdockerコンテナとして動作します。

How to?

用意するもの

設定ファイル、イメージを格納するディレクトリを用意します。
これらはdockerコンテナにマウントされます。
今回は下記をマウントします。

  • /docker/registry/config/config.yml
  • /docker/registry/config/htpasswd
  • /docker/registry/images
  • /docker/registry/certs

/docker/registry/config/config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true # open delete api
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
auth:
htpasswd:
realm: basic-realm
path: /auth/htpasswd # use apache basic-auth

/docker/registry/config/htpasswd

registryへのログインパスワードを格納するファイルです。
下記のようにdockerコンテナに作らせます。

1
$ docker run --rm -ti xmartlabs/htpasswd   > htpasswd

/docker/registry/images

dockerイメージの保存先です。
ただのフォルダです。

/docker/registry/certs

sslのための証明書、.crt、.keyを格納しておきます。
Let’s Encryptが更新されたらここを更新します。

HTTPSでregistryにアクセスするのが基本です。ここを設定しなくても利用はできますが、dockerの設定で信頼できないregistryにアクセスできるよう設定を追加する必要があるので、ここはきちんと設定しておきます。

コンテナ作成

registryをpullします

pullできました

コンテナを作成します

詳細設定のボリューム

詳細設定のポート設定

詳細設定の環境

以上で完成です。

動作確認

コンテナを起動後、dockerからログインできるかどうかを確認します。
ポート番号を確認し下記のように確認しておきます。
usernameとpasswordは最初に作ったhtpasswdファイルで作成した情報になります。

1
2
3
4
> docker login https://hogehoge:28009/
Username: xxxxxx
Password:
Login Succeeded

もしssl設定をしていない場合は下記のようになりますので、クライアント側でdockerの設定を変更しておきます。

1
2
3
4
> docker login http://192.168.11.17:28009
Username: xxxxxx
Password:
Error response from daemon: Get https://192.168.11.17:28009/v2/: http: server gave HTTP response to HTTPS client