Build Your Own Docker Registry

Building a docker registry

In this tutorial, you will learn the process involved with building a docker registry. As part of this process, we will set up a web GUI for our registry. The featured image suggests a focus on CentOS8. However, this tutorial will work for RHEL, Fedora, Ubuntu, and most Linux-based distributions.

Table of Contents

Introduction

Docker is an open-source containerization platform that allows developers to create, deploy, and run applications in isolated environments. Docker images are the building blocks of the Docker platform, and they can be stored in Docker registries, which are centralized repositories for Docker images. By default, Docker uses Docker Hub as the central registry, but you can also set up your own Docker registry to store your private Docker images. In addition, we will discuss the process of building your own Docker registry in Linux, along with best practices and things to avoid.

Building a Docker Registry in Linux

There are two ways to set up a Docker registry in Linux: using the official Docker registry image, or using a third-party registry software such as Harbor or Nexus. In this article, we will focus on the official Docker registry image, which is the most widely used and well-supported option.

Installing Docker

Before you can set up your own Docker registry, you need to have Docker installed on your Linux machine. You can follow the official Docker installation guide for your Linux distribution to install Docker.

Pulling the Registry Image

The official Docker registry image can be pulled from Docker Hub using the following command:

				
					$ docker pull registry
				
			

This will download the latest version of the registry image to your local machine.

Start the Registry Container

Once you have the registry image, you can start a container that runs the registry using the following command:

				
					$ docker run -d -p 5000:5000 --name registry registry
				
			

This command will start a Docker container with the name “registry” and expose port 5000 on the container to port 5000 on the host. This will allow you to access the registry from other machines on your network.

Using the Docker Registry

In this section, we will review how to push and pull images to the Docker registry.

Push an Image to the Registry

Now that you have a running Docker registry, you can push an image to the registry using the following command:

				
					$ docker tag <image-name> localhost:5000/<image-name> 
$ docker push localhost:5000/<image-name>
				
			

This command will tag the local image with the name “localhost:5000/<image-name>” and then push it to the registry. You can replace “<image-name>” with the name of the image you want to push.

Pull an Image from the Registry

You can also pull an image from the Docker registry using the following command:

				
					$ docker pull localhost:5000/<image-name>
				
			

This will download the image from the registry to your local machine.

Building a Docker Registry: Best Practices

When setting up a Docker registry, there are several best practices that you should follow to ensure that your registry is secure and reliable.

Use HTTPS (Secure Docker)

By default, the Docker registry uses HTTP, which is not secure. You should configure your registry to use HTTPS to encrypt communication between the registry and clients.

Use Authentication (Secure Access)

To prevent unauthorized access to your Docker registry, you should use authentication. Docker supports several authentication methods, including basic authentication and token authentication.

Use TLS Certificates

You should use TLS certificates to secure communication between the registry and clients. Docker supports self-signed certificates, but it is recommended to use certificates signed by a trusted certificate authority.

Back up Your Registry

You should regularly back up your Docker registry to ensure that you do not lose your Docker images. Docker provides several tools for backing up and restoring Docker registries, including the “docker save” and “docker load” commands.

Building a Docker Registry: Things To Avoid

When setting up a Docker registry, there are also several things that you should avoid to ensure that your registry is secure and reliable.

Exposing Your Registry to the Public Internet

You should not expose your Docker registry to the public internet, as this can make it vulnerable to attacks. Instead, you should restrict access to the registry to only trusted clients on your private network or use a VPN to securely access the registry.

Storing Sensitive Information in Your Images

You should not store sensitive information, such as passwords or API keys, in your Docker images. This information can be accessed by anyone who has access to the image, including those who download the image from your registry. Instead, you should use environment variables or other configuration methods to store sensitive information.

Running Your Registry as Root

Running your Docker registry as the root user can be dangerous, as it can give attackers full control of your system. Instead, you should run your registry as a non-root user with limited privileges.

Online Resources

Here are a couple useful resources for learning more about Docker registries:

  1. Docker Registry Documentation: https://docs.docker.com/registry/
  2. Docker Registry Image on Docker Hub: https://hub.docker.com/_/registry

Build a Professional GUI for the Docker Registry using Docker Compose

To create a professional-looking GUI for your Docker registry, which can make it easier for users to browse and manage Docker images. One way to do this is to use a web-based registry management tool, such as Portus or Harbor, which provide a web interface for managing Docker registries.

Here are the steps for setting up a web-based GUI for your Docker registry:

Install Docker Compose

Docker Compose is a tool for defining and running multi-container Docker applications. You can use Docker Compose to set up your Docker registry and the registry management tool.

You can follow the official Docker Compose installation guide for your Linux distribution to install Docker Compose.

Install a Registry Management Tool

There are several registry management tools available, but in this example, we will use Portus, which is an open-source web-based registry management tool.

You can install Portus using Docker Compose by creating a new file called docker-compose.yml with the following contents:

				
					version: '3'

services:
  portus:
    image: opensuse/portus:2.5
    ports:
      - "3000:3000"
    environment:
      - PORTUS_MACHINE_FQDN_BY_PROXY=<your-registry-fqdn>
      - PORTUS_DB_HOST=db
      - PORTUS_DB_USERNAME=portus
      - PORTUS_DB_PASSWORD=portus
      - PORTUS_DB_DATABASE=portus_production
      - PORTUS_SECRET_KEY_BASE=<your-secret-key-base>
      - PORTUS_PASSWORD_COMPLEXITY=normal
    depends_on:
      - db
    volumes:
      - /srv/portus/config:/srv/Portus/config
      - /srv/portus/uploads:/srv/Portus/public/uploads

  db:
    image: postgres:12
    environment:
      - POSTGRES_USER=portus
      - POSTGRES_PASSWORD=portus
      - POSTGRES_DB=portus_production
    volumes:
      - /srv/portus/db:/var/lib/postgresql/data

				
			

In this file, you need to replace <your-registry-fqdn> with the fully qualified domain name of your Docker registry and <your-secret-key-base> with a random string of characters that will be used to secure your Portus instance.

Once you have created the docker-compose.yml file, you can start the Portus container using the following command:

				
					$ docker-compose up -d
				
			

This will start the Portus container and expose it on port 3000.

Configure Your Registry

Now that you have Portus installed, you need to configure it to work with your Docker registry. To do this, you need to create a new registry in Portus and configure it to use your Docker registry.

To create a new registry, log in to Portus using the web interface and go to the “Registries” page. Click the “Add registry” button and enter the following information:

  • Name: A name for your registry
  • URL: The URL of your Docker registry (e.g., http://localhost:5000)
  • Access: Public (if you want to allow anyone to access the registry) or Private (if you want to restrict access)

Once you have created the registry, you can configure it to use your Docker registry by going to the “Credentials” page and entering the username and password for your Docker registry.

Upload Images and Manage Your Registry

Now that you have set up your web-based GUI for your Docker registry, you can use it to upload and manage Docker images. You can use the web interface to browse your registry, search for images, and view details about individual images. You can also use the web interface to delete or promote images, as well as manage access to your registry by adding or removing users and teams.

Overall, setting up a web-based GUI for your Docker registry can make it easier for users to manage Docker images and access your registry. However, it’s important to ensure that the web interface is properly secured and that access to the registry is limited to trusted users. In addition, you should regularly back up your registry and the associated data to ensure that you don’t lose any important information.

Conclusion

We discussed the process of building your own Docker registry in Linux, using the official Docker registry image. We also discussed best practices for setting up a secure and reliable Docker registry, including using HTTPS, authentication, TLS certificates, and regular backups.

Finally, we discussed things to avoid when setting up a Docker registry, including exposing it to the public internet, storing sensitive information in images, and running the registry as root. Was this article helpful to you? If so, leave us a comment below. We’d love to hear from you.

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *