TL;DR
- ちゃんとした証明書を使う方法(自己署名証明書を使わない方法)の記事を調べてもあまりない
- ちゃんとした証明書でプライベートレジストリを構築する方法を書いてみました
手順
1. 証明書・秘密鍵の作成
1-1. 証明書を取得
安かったので(ワイルドカード証明書で9000円/年)
https://www.kingssl.com/
を使ってみました。
※admin@ドメイン名 の様なメールアドレスが受信できる必要があります。
また、CSRは IIS で作成したので以降は、IISが前提です。
CSR作成、証明書のエクスポートは割愛しますが、↓を見ると分かります。
CSRの生成方法について(Microsoft Internet Information Services 7.0/7.5)新規・更新
https://www.kingssl.com/ssl_support/technical/csr_support/csr_1.html
1-2. PKCS #12ベースのファイル(.pfx)から秘密鍵と証明書を取り出す
IIS から秘密鍵付きでエクスポートした.pfxは、秘密鍵と証明書が一緒になったバイナリーファイルなので、openssl コマンドでそれぞれを取り出します。
こういう時 Bash on Windows 便利!
PKCS #12詳細: http://qiita.com/kunichiko/items/3e2ec27928a95630a73a
> openssl pkcs12 -in wildcard_tsunomur.xyz_20170210.pfx -out wildcard_tsunomur.xyz_20170210.crt.txt
Enter Import Password:<エクスポートした時のパスワード>
MAC verified OK
Enter PEM pass phrase:<なんでもOK>
Verifying - Enter PEM pass phrase:
-out で出力したファイルに、暗号化された秘密鍵 と 証明書 が含まれます。
-----BEGIN ENCRYPTED PRIVATE KEY-----
以降が暗号化された秘密鍵、-----BEGIN CERTIFICATE-----
以降が証明書です。
それぞれを、tsunomur.xyz.key(秘密鍵)とtsunomur.xyz.crt(証明書)に分割します。
1-3. 暗号化を解除
> openssl rsa -in tsunomur.xyz.key -out tsunomur.xyz.key
Enter pass phrase for tsunomur.xyz.key:<↑で入力したパスワードを入力>
2. プライベートレジストリの起動
> mkdir certs
<certs ディレクトリにtsunomur.xyz.keyとtsunomur.xyz.crtを保存>
> docker run -d -p 5000:5000 --name registry -v /mnt/docker/registry:/var/lib/registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/tsunomur.xyz.crt -e REGISTRY_HTTP_TLS_KEY=/certs/tsunomur.xyz.key registry:latest
3. コンテナ を push
docker tag microsoft/iis dr.tsunomur.xyz:5000/iis
docker push dr.tsunomur.xyz:5000/iis
補足
認証付きにする
registry 自体でBasic認証をかけることが出来ます。nginx 等でリバースプロキシを使うもできます。
※以下はコンテナに入ってファイルを書き換えるという手抜き手順です。
この辺で今フィルファイルのオーバーロードができそう。
https://docs.docker.com/registry/configuration/
- registry コンテナに入る
docker exec -it registry sh
- auth ブロックを追加
vi /etc/docker/registry/config.yml
---
auth:
htpasswd:
realm: basic-realm
path: /etc/registry_passwd
---
- htpasswd ファイルを生成
htpasswd -Bc /etc/registry_passwd tsunomur
docker stop -> docker start で反映します。
ログイン
> docker login https://dr.tsunomur.xyz:5000
Username: tsunomur
Password:
Login Succeeded
プライベートレジストリからイメージを削除する
レジストリ内部では、レイヤーで保存されており、依存関係があることから簡単に削除することができません。
↓のツールを使うと依存関係を含めきれいに削除してくれるようです。ただし自己責任です。
burnettk/delete-docker-registry-image
https://github.com/burnettk/delete-docker-registry-image
参考
SSL 証明書を IIS から Apache に移行する方法
http://webos-goodies.jp/archives/51249316.html
認証付きのDocker Private registryを立てる
http://deeeet.com/writing/2014/10/02/docker-private-registry-auth/
基本 HTTP 認証でサポートされた Docker プライベート・レジストリーをセットアップする
http://www.ibm.com/developerworks/jp/linux/library/l-docker-private-reg/
registry
https://hub.docker.com/_/registry/