Edited at

【Docker】RancherOSで本格的な自宅サーバーを構築しよう(5) ~private registry でdocker imageを管理~

More than 1 year has passed since last update.


private registry でdocker imageを管理しよう


  • 通常は自作したdockerのimageをdocker hub等にあげて管理しますが、今回は
    private registryを自社サーバーに立て、外部に公開したくないimageをそこで管理します

rancher-docker.png


関連記事


メリット


  • 外部に公開したくない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 します

Screen Shot 2016-06-25 at 08.14.53.png



  • 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

Screen Shot 2016-06-25 at 08.54.28.png


##いったん消してpullしてみる
$ docker images
$ docker rmi xxxxxxxx{centosのID}
$ docker pull docker.oooo.com:5000/centos


frontendの動作確認


  • frontendは外部に公開したくないので、.ssh/configでローカルフォワードの設定から8888を転送する

  • アクセスするとこんな感じ

Screen Shot 2016-06-25 at 09.06.53.png


これでregistryは設定できた


  • だいぶregistryにはハマってしまった

  • macのboot2dockerである程度開発してから、productionサーバーにpushできるようになった