How to Set Up a Private Docker Registry

A private Docker registry allows you to store and manage your Docker images securely. This guide will walk you through the steps to set up a private Docker registry using Docker and Docker Compose.

1. Prerequisites

Before you begin, ensure you have the following:

  • Docker installed on your machine.
  • Docker Compose installed.

2. Create a Docker Compose File

To set up a private Docker registry, create a docker-compose.yml file with the following content:

version: '3.8'

services:
registry:
image: registry:2
restart: always
ports:
- "5000:5000"
volumes:
- registry-data:/var/lib/registry

volumes:
registry-data:

In this configuration:

  • image: registry:2: Specifies the Docker Registry image.
  • ports:: Maps port 5000 on the host to port 5000 on the container.
  • volumes:: Persists registry data across container restarts.

3. Start the Docker Registry

Run the following command in the directory where your docker-compose.yml file is located:

docker-compose up -d

This command will start the Docker registry in detached mode.

4. Pushing an Image to Your Private Registry

To push an image to your private registry, follow these steps:

Step 1: Tag the Image

Tag the image you want to push with the registry's address:

docker tag my-image localhost:5000/my-image

Step 2: Push the Image

Use the following command to push the tagged image:

docker push localhost:5000/my-image

5. Pulling an Image from Your Private Registry

To pull an image from your private registry, use the following command:

docker pull localhost:5000/my-image

6. Configuring Authentication (Optional)

For added security, you can configure authentication for your private registry. Here’s how:

Step 1: Create a Password File

Create a password file using the following command:

htpasswd -Bc registry.password myuser

Step 2: Update the Docker Compose File

Modify your docker-compose.yml file to include authentication:

version: '3.8'

services:
registry:
image: registry:2
restart: always
ports:
- "5000:5000"
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
REGISTRY_AUTH_HTPASSWD_PATH: /etc/registry/registry.password
volumes:
- registry-data:/var/lib/registry
- ./registry.password:/etc/registry/registry.password

volumes:
registry-data:

7. Conclusion

Setting up a private Docker registry is a straightforward process that enhances the security and management of your Docker images. By following the steps outlined above, you can create a private registry that meets your organization's needs.