GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar el registro privado de Docker en Ubuntu 18.04 LTS

Docker Registry o 'Registry' es una aplicación del lado del servidor de código abierto y altamente escalable que se puede usar para almacenar y distribuir imágenes de Docker. Era una aplicación del lado del servidor detrás de Docker Hub. En la mayoría de los casos de uso, Docker Registry es una excelente solución si desea implementar el sistema CI/CD en el desarrollo de su aplicación. El registro privado de Docker brinda más rendimiento para el ciclo de desarrollo y producción al centralizar todas sus imágenes personalizadas de aplicación de Docker en un solo lugar.

En este tutorial, le mostraremos cómo instalar y configurar un registro privado de Docker en un servidor Ubuntu 18.04. Usaremos un servidor web Nginx y protegeremos el Registro con un nombre de usuario y una contraseña (autenticación básica).

Requisitos previos

  • Servidor Ubuntu 18.04
  • Privilegios de raíz

¿Qué haremos?

  1. Instalar dependencias
  2. Instalar Docker y Docker-compose
  3. Configurar registro privado de Docker
  4. Pruebas

Paso 1:Instalar las dependencias del paquete

En primer lugar, vamos a instalar algunas dependencias de paquetes para implementar el registro privado de Docker.

Instale las dependencias de los paquetes usando el siguiente comando.

sudo apt install -y gnupg2 pass apache2-utils httpie

Los paquetes gnupg2 y pass se utilizarán para almacenar la autenticación de contraseña en el registro de Docker. Y apache2-utils se usará para generar la autenticación básica, y httpie se usará para la prueba.

Paso 2:instalar Docker y Docker-compose

Ahora vamos a instalar docker y docker-compose desde el repositorio oficial de Ubuntu.

Instale Docker y Docker-compose ejecutando el siguiente comando.

sudo apt install -y docker.io docker-compose -y

Una vez finalizada la instalación, inicie el servicio docker y agréguelo al tiempo de arranque.

sudo systemctl start docker
sudo systemctl enable docker

El Docker está en funcionamiento y se ha instalado Docker-compose. Compruébalo usando el siguiente comando.

docker version
docker-compose version

Y se le mostrará la versión de Docker y Docker-compose instalada en su sistema.

Paso 3:configurar el registro privado de Docker

En este paso, vamos a configurar el entorno de registro de Docker mediante la creación de un entorno de directorios y crearemos alguna configuración que incluya docker-compose.yml, host virtual nginx y configuración adicional, etc.

- Crear directorios de proyectos

Cree un nuevo directorio para el proyecto llamado 'registro' y cree los directorios 'nginx' y 'auth' dentro.

mkdir -p registry/{nginx,auth}

Después de eso, vaya al directorio 'registro' y cree nuevos directorios nuevamente dentro de 'nginx'.

cd registry/
mkdir -p nginx/{conf.d/,ssl}

Y como resultado, los directorios del proyecto se ven como la siguiente imagen.

tree

- Crear secuencia de comandos compuesta por Docker

Ahora queremos crear un nuevo script docker-compose.yml para implementar Docker Registry.

Vaya al directorio 'registro' y cree un nuevo archivo de configuración 'docker-compose.yml'.

cd registry/
vim docker-compose.yml

En primer lugar, defina la versión de redacción que desea utilizar y el servicio.

version: '3'
services:

Después de eso, agregue el primer servicio llamado 'registro'. El servicio de registro de Docker utilizará la imagen de Docker proporcionada por el equipo de Docker 'registry:2. Montará el volumen acoplable 'registrydata' y el directorio local llamado 'auth' que contiene el archivo de autenticación básico 'registry.passwd'. Y por último, se ejecutará en la imagen acoplable personalizada denominada 'mynet' y expondrá el puerto 5000 tanto en el contenedor como en el host.

#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet

A continuación, la configuración del servicio 'nginx' que ejecutará los puertos HTTP y HTTPS y montará el directorio local 'conf.d' para la configuración del host virtual y 'ssl' para los certificados ssl.

#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet

Y por último, defina la red personalizada 'mynet' con un controlador de puente y 'registrydata' con un controlador local.

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

Guarde y cierre la configuración.

A continuación se muestra la configuración completa:

version: '3'
services:

#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet

#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

- Configurar host virtual Nginx

Después de crear el script docker-compose, crearemos el host virtual y la configuración adicional para el servicio nginx.

Vaya al directorio 'nginx/conf.d/' y cree un nuevo archivo de host virtual llamado 'registry.conf'.

cd nginx/conf.d/
vim registry.conf

Pegue la siguiente configuración.

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.hakase-labs.io;
    return 301 https://registry.hakase-labs.io$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.hakase-labs.io;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        # Do not allow connections from docker 1.5 and earlier
        # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
        if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" )  {
            return 404;
        }

        proxy_pass                          http://docker-registry;
        proxy_set_header  Host              $http_host;
        proxy_set_header  X-Real-IP         $remote_addr;
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_read_timeout                  900;
    }

}

Guardar y cerrar.

A continuación, cree una configuración adicional para aumentar max_body_size en nginx. Esto le permitirá cargar imágenes acoplables con un tamaño máximo de 2 GB.

vim additional.conf

Pegue la configuración a continuación.

client_max_body_size 2G;

Guardar y cerrar.

- Configurar certificado SSL y autenticación básica

Copie los archivos de certificado SSL de su dominio en el directorio 'ssl'.

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

Ahora vaya al directorio 'auth' y genere el nuevo archivo de contraseña 'registry.passwd'.

cd auth/

Genere una nueva contraseña para el usuario hakase.

htpasswd -Bc registry.passwd hakase
TYPE THE STRONG PASSWORD

Y se ha completado la configuración del entorno para implementar Private Docker Registry.

A continuación se muestra la captura de pantalla de los archivos y directorios de nuestro entorno.

tree

- Ejecutar el registro de Docker

Ejecute Docker Registry con el siguiente comando docker-compose.

docker-compose up -d

Y obtendrá el resultado como se muestra a continuación.

Después de eso, asegúrese de que el servicio de registro y nginx esté en funcionamiento. Verifique usando el siguiente comando.

docker-compose ps
netstat -plntu

Y se le mostrará que el servicio de 'registro' se está ejecutando en el puerto '5000', y el servicio 'nginx' expondrá los puertos HTTP y HTTPS como se muestra a continuación.

Paso 4 - Prueba

Antes de probar nuestro Registro privado de Docker, debemos agregar el certificado de CA raíz a la ventana acoplable y al sistema.

Si está utilizando el certificado de archivo pem, expórtelo al archivo .crt mediante el comando OpenSSL.

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

Ahora cree un nuevo directorio para el certificado de la ventana acoplable y copie el certificado de CA raíz en él.

mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/

Y luego cree un nuevo directorio '/usr/share/ca-certificate/extra' y copie el certificado raíz CA en él.

mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

Después de eso, vuelva a configurar el paquete 'ca-certificate' y reinicie el servicio Docker.

dpkg-reconfigure ca-certificates
systemctl restart docker

- Descargar imagen de Docker

Descargue la nueva imagen de Docker con el siguiente comando.

docker pull ubuntu:16.04

Cuando esté completo, etiquete la imagen para el registro privado con el siguiente comando.

docker image tag ubuntu:16.04 registry.hakase-labs.io/ubuntu16

Verifique nuevamente la lista de imágenes de Docker en el sistema y obtendrá nuevas imágenes como se muestra a continuación.

docker images

- Enviar imagen a un registro local privado

Inicie sesión en el Registro privado de Docker con el siguiente comando.

docker login https://registry.hakase-labs.io/v2/

Escriba el nombre de usuario y la contraseña según el archivo 'registry.htpasswd'.

Ahora verifique la imagen disponible de la ventana acoplable en el Registro.

http -a hakase https://registry.hakase-labs.io/v2/_catalog

Y no hay una imagen acoplable en el Registro.

Ahora inserte nuestra imagen personalizada en el Registro privado de Docker.

docker push registry.hakase-labs.io/ubuntu16

Verifique nuevamente y asegúrese de obtener la imagen acoplable 'ubuntu16' en el repositorio privado.

http -a hakase https://registry.hakase-labs.io/v2/_catalog

Y finalmente, la instalación y configuración de Private Docker Registry con Nginx y Basic Authentication se ha completado con éxito.


Ubuntu
  1. Cómo instalar Docker en Ubuntu 22.04/20.04 LTS

  2. Cómo configurar el registro privado de Docker en Kubernetes (k8s)

  3. Cómo configurar un registro privado de Docker en Rocky Linux 8

  4. Cómo configurar el servidor Rsyslog en Ubuntu 18.04 LTS

  5. Cómo configurar Elasticsearch en Ubuntu 18.04 y 16.04 LTS

Cómo instalar Docker en Ubuntu 18.04 LTS

Cómo configurar el cortafuegos UFW en Ubuntu 18.04 LTS

Cómo configurar el cortafuegos UFW en Ubuntu 20.04 LTS

Cómo instalar Docker en Ubuntu 20.04 LTS

Cómo instalar Kitematic en Ubuntu 20.04 LTS

Cómo crear un registro Docker privado en Ubuntu Linux