Introduction
This document will describe the process to setup / run an private docker registry v2. This come handy when you need to have a private image repository. Why you might need this ? Imagine that you need a fast local registry or if you feel uncomfortable pushing you private work to docker hub.
If you search the docker documentation they recommend to use it as a container. That will work in most of the cases. In our case we wanted to have it running on a standalone server, to store the data on a shared storage and several other reasons (speed is one of the reasons).
Installation
What we need is epel repo installed and we need to install docker-distribution
root@tfm-swrm01: yum search docker-distribution Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * epel: epel.check-update.co.uk ======================= N/S matched: docker-distribution ======================= docker-distribution.x86_64 : Docker toolset to pack, ship, store, and deliver : content Name and summary matches only, use "search all" for everything. |
at the time of writing this article the version available is 2.4.1:
[root@tfm-swrm01 registry]# yum info docker-distribution Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * epel: epel.check-update.co.uk Installed Packages Name : docker-distribution Arch : x86_64 Version : 2.4.1 Release : 2.el7 Size : 15 M Repo : installed From repo : extras Summary : Docker toolset to pack, ship, store, and deliver content URL : https: //github.com/docker/distribution License : ASL 2.0 Description : Docker toolset to pack, ship, store, and deliver content |
Installing it is pretty forward:
yum install -y docker-distribution |
To enable docker registry to run at boot
systemctl enable docker-distribution.service
and to start it:
systemctl start docker-distribution.service
Configuration
Configuration is done via /etc/docker-distribution/registry/config.yml . We decided to start with a minimal configuration file and add additional setting later. Below is a configuration file that works :
version: 0.1 log: fields: service: registry storage: cache: layerinfo: inmemory filesystem: rootdirectory: /data/docker-registry http: addr: :5000 |
Our shared storage is mounted in /data so keeping images in /data/docker-registry makes sense.
Remember that docker registry supports a lot of storage backend drivers (Local file system,Microsoft’s Azure Blob Storage,Google Cloud Storage, Amazon’s Simple Storage Service (S3) , Openstack Swift object storage, Aliyun OSS for object storage) but we will use local filesystem for now.
Docker has comprehensive documentation regarding parameters supported in config.yml, you can find it at Registry Configuration Reference and we recommend to check it in order to understand what are all the options you can configure.
Using it
1) Build a container and tag it to use the custom repository
docker build /tmp/grafana -t 192.168.1.1:5000/custom_grafana
2) Push the image to repository:
docker push 192.168.1.1:5000/custom_grafana
Thanks a lot!