blog.monophile.net

コンピュータのこととかのメモ。

山本 一彰 | Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 2015年にコンビネータ論理を基に計算完備な計算手法 "論理珠算"を開発し、 それを含む体系である"算道"を構成した。 その成果により、 第19回 文化庁メディア芸術祭 アート部門 新人賞 (文部科学大臣賞) を2016年に受賞。 現在はインフラエンジニアとして生計をたててている。

技術

Configuration Management Ansible, Terraform, Cloud-Init
Cloud Platform GCP, AWS, Azure, OpenStack
Virtualization, Container QEMU+KVM, Xen, LXD/LXC, Docker
OS Ubuntu, Debian GNU/Linux, CentOS, FreeBSD, ...
Storage Ceph, GlusterFS, ZFS, btrfs, ...
Router Linux+Netfilter, Quagga, VyOS, Cisco IOS, YAMAHA RTX, ...
Switch Dell FTOS, AlaxalA, NETGEAR, ...
DB MySQL, MariaDB(Galera Cluster), MongoDB
Mail postfix, dovecot, RainLoop
WebApps WordPress, GitLab, MatterMost, Redmine, ...
Monitoring Nagios, Munin, Zabbix, Prometheus, Grafana
Misc Kubernetes/Istio, certbot, dnsmasq, ...

習得中

OS CoreOS(Container Linux), Windows on QEMU, ...
SQL PostgreSQL, BigQuery, ...
NoSQL CouchDB, ArangoDB, Neo4J, ...
Misc Proxmox, oVirt, MAAS, NFV, ...

投稿

DockerのプライベートレジストリをWebUI(docker-registry-web)とともに使ってみる

概要

Docker Swarmを使うためにDockerのプライベートレジストリを立てた。 レジストリの中を閲覧したり削除したりするのにWebUIがあると便利そうだな、 と思って調べてみたら良さそうなの↓があったので使ってみた。

Docker Swarmを初期化する。

使ったDockerは17.09。

$ docker --version
Docker version 17.09.1-ce, build 19e2cf6

↓でDocker Swarmを初期化する。

$ docker swarm init

docker-compose.registry.yml

  • プライベートレジストリはSwarmのマネージャノードで立ち上げる。
  • プライベートレジストリには http://localhost:5000/ でアクセスできるようにする。
  • WebUIには http://localhost:5001/ でアクセスできるようにする。
  • レジストリの閲覧だけでなく削除もできるようにする。

上記の要件を満たすように、 ↓ docker-compose.registry.yml を用意する。

version: '3.4'

networks:
  registry:
    driver: overlay

volumes:
  registry:
    driver: local

services:
  registry:
    image: registry:2
    ports:
    - target:    5000
      published: 5000
      protocol:  tcp
      mode:      ingress
    volumes:
    - registry:/var/lib/registry
    deploy:
      placement:
        constraints:
        - node.role == manager
    environment:
    - REGISTRY_STORAGE_DELETE_ENABLED=true

  registry-web:
    image: hyper/docker-registry-web
    ports:
    - target:    8080
      published: 5001
      protocol:  tcp
      mode:      ingress
    environment:
    - REGISTRY_URL=http://registry:5000/v2
    - REGISTRY_NAME=registry:5000
    - REGISTRY_READONLY=false

環境変数の設定については↓を参照するとよい。

プライベートレジストリとWebUIを立ち上げる

↓でプライベートレジストリとWebUIを立ち上げる。

$ docker deploy -c docker-compose.registry.yml registry
Creating network registry_default
Creating service registry_registry-web
Creating service registry_registry

↓で立ち上がったことが確認できる。

$ docker service ls | tr -s " " | column -ts " "
ID            NAME                   MODE        REPLICAS  IMAGE                             PORTS
oit2xuizkhe9  registry_registry      replicated  1/1       registry:2                        *:5000->5000/tcp
rcko6ppvy4zg  registry_registry-web  replicated  1/1       hyper/docker-registry-web:latest  *:5001->8080/tcp

↓のように空の応答がレジストリサーバから返ってくればOK。

$ curl localhost:5000/v2/
{}

さらに↓でWebUIにアクセスできるはず。 (まだ何も入れていないので、もちろん空っぽ。)

Ubuntuの公式イメージをローカルレジストリにpushしてみる

↓でUbuntu公式イメージを取ってくる。

$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
50aff78429b1: Already exists
f6d82e297bce: Already exists
275abb2c8a6f: Already exists
9f15a39356d6: Already exists
fc0342a94c89: Already exists
Digest: sha256:ec0e4e8bf2c1178e025099eed57c566959bb408c6b478c284c1683bc4298b683
Status: Downloaded newer image for ubuntu:latest

↓取ってきたイメージに localhost:5000/ubuntu:latest というタグをつける。

$ docker image tag ubuntu:latest localhost:5000/ubuntu:latest

↓タグを付けたイメージをプライベートリポジトリにpushする。

$ docker image push localhost:5000/ubuntu:latest
The push refers to a repository [localhost:5000/ubuntu]
f17fc24fb8d0: Pushed
6458f770d435: Pushed
5a876f8f1a3d: Pushed
d2f8c05d353b: Pushed
48e0baf45d4d: Pushed
latest: digest: sha256:f871d0805ee3ce1c52b0608108dbdf1b447a34d22d5c7278a3a9dd78fc12c663 size: 1357

この状態でWebUIをみると↓のようにアップロードしたイメージを見ることができ、 さらに削除も可能。

めでたし、めでたし。