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

#private registry でdocker imageを管理しよう

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


![rancher-docker.png](https://qiita-image-store.s3.amazonaws.com/0/62822/58fe1d1a-aaff-059e-b85b-a95f8b490d08.png)

## 関連記事
+ [RancherOSで本格的な自宅サーバーを構築しよう](http://qiita.com/okasho1010/items/da52b4dc12221feca55c)
+ [RancherOSでrancher-serverをインストールしよう](http://qiita.com/okasho1010/items/305e0af4545901d44a94) 

+ [RancherOSでrancher-agentを構築しよう](http://qiita.com/okasho1010/items/500c3705d2f4610cebe0)

+ [RancherOSでGlusterFSを使ってデータを永続化しよう](http://qiita.com/okasho1010/items/2620da1b2e93437e8a74)

+ **[RancherOSにprivate registoryを立ててdocker imageを管理しよう](http://qiita.com/okasho1010/items/cf0a9569638d00a9e451)　←　今ここ**

+ [RancherのCATALOGのライブラリー一覧](http://qiita.com/okasho1010/items/f6875d5bce2ac6752758) 


## メリット
+ 外部に公開したくない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 します

<img width="1679" alt="Screen Shot 2016-06-25 at 08.14.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/01607194-c0cf-82db-2769-c35fec66bd9e.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

```
<img width="1051" alt="Screen Shot 2016-06-25 at 08.54.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/4519eee3-368d-a4ba-86c7-30779ed46383.png">


```

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

## frontendの動作確認

+ frontendは外部に公開したくないので、.ssh/configでローカルフォワードの設定から8888を転送する
+ アクセスするとこんな感じ

<img width="1680" alt="Screen Shot 2016-06-25 at 09.06.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/40cd664e-1b5d-474d-0b60-06a41ec07f70.png">

##これでregistryは設定できた
+ だいぶregistryにはハマってしまった
+ macのboot2dockerである程度開発してから、productionサーバーにpushできるようになった