#private registry でdocker imageを管理しよう
- 通常は自作したdockerのimageをdocker hub等にあげて管理しますが、今回は
private registryを自社サーバーに立て、外部に公開したくないimageをそこで管理します
関連記事
メリット
- 外部に公開したくないimageが管理できる
- 別の環境(ローカルのdocker等)で作成したimageをそのまま使用することができる
- すなわち、production環境でdocker buildなど叩かないので 安全
仕様の確認
- ローカルで作成したimageを
docker push 〜〜
とすることで管理でき、puroductionサーバーですぐに使える - 作成したimageは
registry-frontend
で確認することができる -
docker pull 〜〜
でどこからでもimageがpullできる
##使うライブラリ
- registry:2.3.0
- konradkleine/docker-registry-frontend:v2
##registry + registry-frontend
- registry-frontendというやつが、現在registryに何がpushされているか確認することができます
- まずはrancherの管理画面から Add stack します
-
docker-compose.yml
registry: image: registry:2.3.0 volumes: - vol_registry:/var/lib/registry volume_driver: convoy-gluster ports: - 5000:5000 labels: io.rancher.scheduler.global: 'true' registry-frontend: image: konradkleine/docker-registry-frontend:v2 environment: - ENV_DOCKER_REGISTRY_HOST=registry - ENV_DOCKER_REGISTRY_PORT=5000 links: - registry:registry ports: - 8888:80
-
create してしばらく待つ
##httpsのエラー
-
--insecure-registryがどうたらこうたら
FATA[0004] Error: v1 ping attempt failed with error: Get https://example.com:5000/v1/_ping: EOF.
If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add --insecure-registry example.com:5000
to the daemon's arguments.
In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/example.com:5000/ca.crt
```
- どうやら、private registryの通信にはhttps通信が使われるっぽくて、証明書ないやんっておこってくる。
なので、httpにするように設定を書くのが楽だったからそっちでとりあえず対応
RancherOSの場合
$ sudo ros config set rancher.docker.args "['daemon','--insecure-registry,docker.ooo.com:5000']"
$ sudo ros config get rancher.docker
#ここでrestartをするわけだが、コンテナも一時的に死ぬので注意
$ sudo system-docker restart docker
boot2dockerの場合
$ boot2docker ssh
$ sudo vi /var/lib/boot2docker/profile
EXTRA_ARGS="--insecure-registry docker.oooo.com:5000"
#ここでrestartをするわけだが、コンテナも一時的に死ぬので注意
$ sudo /etc/init.d/docker restart
CoreOSの場合
coreos:
units:
- name: docker.service
drop-ins:
- name: 50-insecure-registry.conf
content: |
[Service]
Environment=DOCKER_OPTS='--insecure-registry="example.com:5000"'
## coreosをrestart
##registryの動作確認
- 別の環境からアクセスしてみる
$ docker login docker.oooo.com:5000
$ docker pull centos
$ docker tag centos docker.oooo.com:5000/centos
$ docker push docker.oooo.com:5000/centos
##いったん消してpullしてみる
$ docker images
$ docker rmi xxxxxxxx{centosのID}
$ docker pull docker.oooo.com:5000/centos
frontendの動作確認
- frontendは外部に公開したくないので、.ssh/configでローカルフォワードの設定から8888を転送する
- アクセスするとこんな感じ
##これでregistryは設定できた
- だいぶregistryにはハマってしまった
- macのboot2dockerである程度開発してから、productionサーバーにpushできるようになった