プライベートDockerHubをゆるく使う
Dockerを使ってるとDockerHubも使いたくなることがあると思いますが、
業務だとimageをパブリックな所に置けなかったりしますよね。
Docker Registryを使えばプライベートなDockerHubを割と簡単に構築できるので、
作り方や使い方などを備忘録も兼ねて公開したいと思います。
imageを共有できれば良いや程度のゆるい感じでやっていきます。
使用マシン
- registry-host(Registryコンテナを起動するマシン)
- my-pc(自分の作業PC)
自分の場合、社内の空きPCをregistry-hostとして使いました。
構築
registry-hostに以下のdocker-compose.ymlを用意してコンテナを起動します。
[registry-host]$ mkdir ~/docker_hub && cd ~/docker_hub [registry-host]$ vi docker-compose.yml version: '2' services: registry: image: registry:2 volumes: - ./registry:/var/lib/registry ports: - "5000:5000" restart: always [registry-host]$ docker-compose up -d
volumesの指定は登録したリポジトリデータを永続化するためのものです。
初回構築時にはdocker-compose.ymlだけあれば良いです。
登録
事前設定
httpで通信する場合、my-pcのDockerでregistry-hostを許可する設定が必要です。
registry-hostの部分はご自身の環境のIPやホスト名に置き換えてください。
これでmy-pcからregistry-hostへimageをpushできます。
例としてalpine linuxを登録してみます。
[my-pc]$ docker pull alpine:latest [my-pc]$ docker tag alpine:latest registry-host:5000/my-alpine:latest [my-pc]$ docker push registry-host:5000/my-alpine:latest
登録の確認
リポジトリ一覧
[my-pc]$ curl http://registry-host:5000/v2/_catalog {"repositories":["my-alpine"]}
タグ一覧
repositoriy名を指定して、タグ一覧を取得します。
この例ではmy-alpineを指定しています。
[my-pc]$ curl http://registry-host:5000/v2/my-alpine/tags/list {"name":"my-alpine","tags":["latest"]}
Pull
[my-pc]$ docker pull registry-host:5000/my-alpine:latest
削除
リポジトリの削除
[registry-host]$ cd ~/docker_hub/registry/docker/registry/v2/repositories [registry-host]$ rm -rf <repositoriy-name>
タグの削除
[registry-host]$ cd ~/docker_hub/registry/docker/registry/v2/repositories [registry-host]$ rm -rf <repositoriy-name>/_manifests/tags/<tag-name>
たぶん削除用のAPIとかあると思うんですが、今のところディレクトリ削除で何とかなってます。
削除自体あまりしないですし、壊れたらまたPushすればいいやってノリです。
今回はゆるく使うということでimageの管理は適当ですが、
ちゃんと管理したい人はPortusというのを使うと色々出来そうです。
まぁ自分だったら、これ以上は面倒なので素直にaws ECRとかを使いますが。
以上、現場からでした。