Saltar al contenido

Cómo establecer un registro privado del estibador en Ubuntu 18.04

marzo 4, 2020

 

El autor ha seleccionado la Apache Software Foundation para recibir una donación como parte del programa de escritura de donaciones.

Introducción

estibador del registro es una aplicación que gestiona el almacenamiento y la entrega de imágenes de contenedores acoplables. Registros centralizar imágenes de contenedores y reducir los tiempos de construcción para los desarrolladores. Docker imágenes garantizan el mismo entorno de ejecución a través de la virtualización, pero la construcción de una imagen puede implicar una inversión de tiempo considerable. Por ejemplo, en lugar de instalar las dependencias y los paquetes por separado para utilizar acoplable, los desarrolladores pueden descargar una imagen comprimida de un registro que contiene todos los componentes necesarios. Además, los desarrolladores pueden automatizar empujando imágenes a un registro con herramientas de integración continua, como TravisCI, para actualizar sin problemas las imágenes durante la producción y el desarrollo.

acoplable también tiene un registro público gratuito, acoplable Hub, que puede alojar sus imágenes personalizadas de estibador, pero hay situaciones en las que no quiere que su imagen sea accesible al público. Imágenes típicamente contienen todo el código necesario para ejecutar una aplicación, así que usar un registro privado es preferible cuando se utiliza el software propietario.

En este tutorial, se pondrá en marcha y asegurar su propio registro del estibador privado. Que va a utilizar acoplable Componer para definir configuraciones para ejecutar sus aplicaciones acoplables y Nginx para el tráfico del servidor hacia adelante desde HTTPS al contenedor del estibador en funcionamiento. Una vez que haya completado este tutorial, usted será capaz de empujar una imagen acoplable a medida para su registro privado y tirar de la imagen de forma segura desde un servidor remoto.

Requisitos previos

Antes de empezar esta guía, necesitará lo siguiente:

  • Dos Ubuntu 18.04 servidores creados siguiendo la guía de configuración inicial del servidor de Ubuntu 18.04, incluyendo un usuario no root sudo y un firewall. Un servidor será la sede de su Registro de Docker privada y el otro será el servidor de cliente.
  • acoplable y estibador-Componer instalados en ambos servidores siguiendo el Cómo instalar acoplable-Componer en Ubuntu 18.04 tutorial. Sólo es necesario para completar el primer paso de este tutorial para instalar acoplable Componer. En este tutorial se explica cómo instalar acoplable como parte de sus requisitos previos.
  • Nginx instalado en el servidor privado acoplable Registro siguiendo el Cómo instalar Nginx en Ubuntu 18.04.
  • Nginx asegurado con Cifrar Vamos en su servidor para el registro del estibador privada, siguiendo Cómo proteger Cifrar de Nginx Con Let. Asegúrese de volver a dirigir todo el tráfico de HTTP a HTTPS en el Paso 4.
  • Un nombre de dominio que se resuelve en el servidor que está utilizando para el Registro acoplable privado. Va a instalar esto como parte del requisito de cifrado de la let.

Paso 1 – Instalación y configuración de la herramienta de línea de comandos acoplable Registro

la ventana acoplable es útil para iniciar y administrar uno o dos contenedores estibador, pero, para el despliegue completo la mayoría de aplicaciones que se ejecutan dentro de contenedores acoplables requieren otros componentes que se ejecutan en paralelo . Por ejemplo, una gran cantidad de aplicaciones web consiste en un servidor web, como Nginx, que sirve código de la aplicación, un lenguaje de programación interpretado como PHP, y un servidor de base de datos como MySQL.

Con acoplable Componer, puede escribir un archivo .yml para establecer la configuración de cada recipiente y la información de los contenedores tienen que comunicarse entre sí. A continuación, puede utilizar la herramienta de línea de comandos de composición del cargador de muelle para emitir comandos a todos los componentes que conforman su aplicación.

estibador del registro es en sí una aplicación con múltiples componentes, por lo que va a utilizar acoplable Componer para administrar su configuración. Para iniciar una instancia del registro, podrás configurar un archivo de cargador de muelle-compose.yml para definir la ubicación en la que su registro se almacenará sus datos.

En el servidor que ha creado para alojar su registro acoplable privada, puede crear un directorio ventana acoplable-registro, se mueven en él, y luego crear una subcarpeta de datos con los siguientes comandos:

mkdir ~/docker-registry && cd $_
mkdir data

  • mkdir ~ / cargador de muelle-registro && cd $ _
  • mkdir datos

Usar el editor de texto para crear el archivo de configuración del cargador de muelle-compose.yml:

nano docker-compose.yml

  • nano-ventana acoplable compose.yml

Añadir el siguiente contenido en el fichero, que describe la básica configuración para un acoplable Registro:

version: '3'

services:
registry:
image: registry:2
ports:
- "5000:5000"
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./data:/data

la sección de medio ambiente establece una variable de entorno en el recipiente acoplable del registro con la ruta / datos. La aplicación comprueba acoplable registro esta variable de entorno cuando se pone en marcha, y como resultado comienza a guardar sus datos en la carpeta / datos.

Sin embargo, como usted ha incluido los volúmenes: – línea de ./data:/data, acoplable comenzará a asignar el directorio / datos de dicho recipiente a / datos en el servidor de registro. El resultado final es que los datos del registro del estibador todo se almacena en ~ / cargador de muelle en el Registro / datos en el servidor de registro.

La sección de puertos, con la configuración 5000: 5000, dice acoplable para mapear el puerto 5000 en el servidor para el puerto 5000 en el contenedor de funcionamiento. Esto le permite enviar una solicitud al puerto 5000 en el servidor, y tienen la solicitud enviada a la solicitud de registro.

Ahora puede comenzar acoplable Redactar para comprobar la configuración:

docker-compose up

  • ventana acoplable-componer hasta

Usted verá barras de descarga en su salida que muestran acoplable descargar la imagen del estibador Registro del propio registro de estibador. Dentro de un minuto o dos, verá la salida que se parece a las siguientes versiones (pueden variar):

Output of docker-compose upStarting docker-registry_registry_1 ... done
Attaching to docker-registry_registry_1
registry_1 | time="2018-11-06T18:43:09Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.7.6 instance.id=c63483ee-7ad5-4205-9e28-3e809c843d42 version=v2.6.2
registry_1 | time="2018-11-06T18:43:09Z" level=info msg="redis not configured" go.version=go1.7.6 instance.id=c63483ee-7ad5-4205-9e28-3e809c843d42 version=v2.6.2
registry_1 | time="2018-11-06T18:43:09Z" level=info msg="Starting upload purge in 20m0s" go.version=go1.7.6 instance.id=c63483ee-7ad5-4205-9e28-3e809c843d42 version=v2.6.2
registry_1 | time="2018-11-06T18:43:09Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.7.6 instance.id=c63483ee-7ad5-4205-9e28-3e809c843d42 version=v2.6.2
registry_1 | time="2018-11-06T18:43:09Z" level=info msg="listening on [::]:5000" go.version=go1.7.6 instance.id=c63483ee-7ad5-4205-9e28-3e809c843d42 version=v2.6.2

Vas a hacer frente a la secreta proporcionada mensaje de advertencia Sin HTTP más adelante en este tutorial. Los espectáculos de salida que el recipiente se está iniciando. La última línea de la salida da se ha iniciado con éxito escucha en el puerto 5000.

Por defecto, acoplable Componer permanecerá en espera de su entrada, así que pulse CTRL + C para apagar el contenedor del estibador del Registro.

Ha configurado una escucha completa del estibador registro en el puerto 5000. En este punto, el registro no arrancará a menos que lo que aparezca de forma manual. Además, acoplable Registro no viene con ningún mecanismo incorporado de autenticación, por lo que es actualmente inseguro y completamente abierto al público. En los siguientes pasos, frente a estos problemas de seguridad.

Paso 2 – Configuración de reenvío de puertos Nginx

Ya han HTTPS configurado en el servidor de registro acoplable con Nginx, lo que significa que ahora puede configurar el reenvío de puertos de Nginx al puerto 5000. Una vez completado este paso, se puede acceder su registro directamente en example.com.

Como parte de la Cómo proteger el requisito de cifrado de Nginx con let, que ya han puesto en marcha el archivo /etc
ginx/sites-available/example.com que contiene la configuración del servidor.

Abrir archivo con su editor de texto:

sudo nano /etc
ginx/sites-available/example.com

  • sudo nano /etc
    ginx/sites-available/example.com

Encuentre la línea de ubicación existente. Se parece a esto:

...
location / {
...
}
...

Usted necesidad de reenviar tráfico al puerto 5000, donde su registro va a correr. También desea añadir cabeceras a la solicitud en el registro, que proporcionan información adicional del servidor con cada solicitud y respuesta. Eliminar el contenido de la sección de localización, y añadir el siguiente contenido en esa sección:

...
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://localhost:5000;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
...

La sección $ HTTP_USER_AGENT verifica que la versión del estibador del cliente está por encima de 1,5, y asegura que el agente de usuario no es una aplicación Go. Dado que está utilizando la versión 2.0 del registro, los clientes más antiguos no son compatibles. Para obtener más información, se puede encontrar la configuración del encabezado en Nginx Nginx guía Registro de estibador.

guarde y salga del archivo. Aplicar los cambios al reiniciar Nginx: servicio

sudo service nginx restart

  • sudo nginx reiniciar

Puede confirmar que Nginx es el reenvío de tráfico al puerto 5000 mediante la ejecución del registro:

cd ~/docker-registry
docker-compose up

  • cd ~ / cargador de muelle-registro
  • ventana acoplable-componer hasta

En una ventana del navegador, abra la siguiente URL:

https://example.com/v2

verá un objeto JSON vacía, o:

{}

En su terminal, verá una salida similar a la siguiente:

Output of docker-compose upregistry_1 | time="2018-11-07T17:57:42Z" level=info msg="response completed" go.version=go1.7.6 http.request.host=cornellappdev.com http.request.id=a8f5984e-15e3-4946-9c40-d71f8557652f http.request.method=GET http.request.remoteaddr=128.84.125.58 http.request.uri="/v2/" http.request.useragent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.125995ms http.response.status=200 http.response.written=2 instance.id=3093e5ab-5715-42bc-808e-73f310848860 version=v2.6.2
registry_1 | 172.18.0.1 - - [07/Nov/2018:17:57:42 +0000] "GET /v2/ HTTP/1.0" 200 2 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7"

usted puede ver a partir de la última línea que una petición GET se hizo a / v2 /, que es el punto final que envió una solicitud a partir de su navegador. El recipiente de recepción de la solicitud que ha realizado, desde el reenvío de puertos, y devuelve una respuesta de {}. El código 200 en la última línea de los medios de salida que el envase con asa de la solicitud con éxito.

Ahora que ha configurado el reenvío de puertos, se puede pasar a la mejora de la seguridad de su registro.

Paso 3 – Configuración de la autenticación

Con Nginx solicitudes de proxies correctamente, ahora se puede asegurar su registro con la autenticación HTTP para gestionar quién tiene acceso a su registro de estibador. Para lograr esto, vamos a crear un archivo de autenticación con htpasswd y añadir usuarios a la misma. Autenticación HTTP es rápida de instalar y seguro mediante una conexión HTTPS, que es lo que va a utilizar el registro.

Usted puede instalar el paquete htpasswd ejecutando el siguiente:

sudo apt install apache2-utils

  • sudo apt instalar apache2-utils

continuación creará el directorio donde se va a almacenar nuestras credenciales de autenticación, y el cambio en ese directorio. $ _ Se expande hasta el último argumento de la orden anterior, en este caso ~ / cargador de muelle-registro / autenticación:

mkdir ~/docker-registry/auth && cd $_

  • mkdir ~ / cargador de muelle-registro / autenticación && cd $ _

A continuación, se va a crear el primer usuario de la siguiente manera, en sustitución de nombre de usuario con el nombre de usuario que desee utilizar. El indicador -B especifica Bcrypt cifrado, que es más seguro que el cifrado predeterminada. Introduzca la contraseña cuando se le solicite:

htpasswd -Bc registry.password username

  • htpasswd -bc registry.password nombre de usuario

Nota: Para añadir más usuarios, vuelva a ejecutar el comando anterior sin la opción -c, (la C es para crear):

htpasswd registry.password username

  • htpasswd nombre de usuario registry.password

a continuación, podrás editar el archivo de cargador de muelle-compose.yml para contar acoplable para utilizar el archivo que ha creado para autenticar a los usuarios. cargador de muelle-compose.yml

cd ~/docker-registry
nano docker-compose.yml

  • cd ~ / cargador de muelle-registro
  • nano

Puede añadir variables de entorno y un volumen para la autenticación / directorio que ha creado, mediante la edición del archivo de cargador de muelle-compose.yml para contar acoplable cómo desea autenticar a los usuarios. Añadir el siguiente contenido destacado en el fichero: htpasswd

version: '3'

services:
registry:
image: registry:2
ports:
- "5000:5000"
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- ./auth:/auth
- ./data:/data

Para REGISTRY_AUTH, ha especificado, que es el esquema de autenticación que está usando, y un conjunto REGISTRY_AUTH_HTPASSWD_PATH a la ruta del archivo de autenticación. Por último, REGISTRY_AUTH_HTPASSWD_REALM significa el nombre de dominio htpasswd.

Ahora puede comprobar que la autenticación funciona correctamente, ejecutando el registro y la comprobación de que se le pide al usuario un nombre de usuario y contraseña.

docker-compose up

  • ventana acoplable-componer hasta

En una ventana del navegador, abra https://example.com/v2.

Después de introducir nombre de usuario y la contraseña correspondiente, verá {} una vez más. Que confirme la configuración básica de autenticación: el registro sólo se devuelve el resultado después de que ha introducido el nombre de usuario y la contraseña correctos. Ahora ha asegurado su registro, y puede seguir usando el registro.

Paso 4 – A partir del estibador Registro como servicio

Usted quiere asegurarse de que su registro se iniciará cada vez que el sistema arranca. Si hay algún fallos del sistema imprevistas, usted quiere asegurarse de que se reinicie el registro cuando se reinicia el servidor. Abre ventana acoplable-compose.yml:

nano docker-compose.yml

  • nano-ventana acoplable compose.yml

Añadir la siguiente línea de contenido bajo de registro ::

...
registry:
restart: always
...

Puede iniciar su registro como un proceso en segundo plano, lo que le permitirá a la salida la sesión ssh y persiste el proceso:

docker-compose up -d

  • ventana acoplable-componer hasta -d

Con su registro ejecuta en segundo plano, ahora se puede preparar Nginx para la carga de archivos.

Paso 5 – El aumento de carga de archivos de tamaño para Nginx

Antes de poder empujar una imagen para el registro, es necesario asegurarse de que su registro será capaz de manejar grandes cargas de archivos. Aunque acoplable divide grandes archivos de imagen en capas separadas, a veces pueden ser más de 1 GB. Por defecto, Nginx tiene un límite de 1 MB en la carga de archivos, por lo que necesita para editar el archivo de configuración de nginx y establecer el tamaño máximo de carga de archivos de 2 GB.

sudo nano /etc
ginx
ginx.conf

  • sudo nano /etc
    ginx
    ginx.conf

Encuentre la sección de http, y añadir la siguiente línea:

...
http {
client_max_body_size 2000M;
...
}
...

Por último, reinicie Nginx para aplicar los cambios de configuración: servicio

sudo service nginx restart

  • sudo nginx reinicio

ahora puede cargar grandes imágenes en el Registro acoplable sin errores Nginx.

Paso 6 – Publicación en su privado acoplable Registro

que ahora está listo para publicar una imagen para su registro acoplable privado, pero primero hay que crear una imagen. Para este tutorial, creará una imagen sencilla basada en la imagen de ubuntu acoplable Hub sucesivamente. Acoplable Hub es un registro disponible al público, con muchas imágenes preconfiguradas que pueden ser aprovechados para Dockerize rápidamente aplicaciones. Utilizando la imagen de Ubuntu, que pondrá a prueba empujando y tirando de su registro.

desde el cliente de servidor de , crear un pequeño, la imagen vacío para empujar a su nuevo registro, las banderas y -i -t le dan acceso a una consola interactiva en el recipiente:

docker run -t -i ubuntu /bin/bash

  • ventana acoplable plazo -t -i ubuntu / bin / bash

Después de que termine la descarga podrás dentro de un estibador del sistema, nota que su ID de contenedor siguiente root @ variará. Hacer un cambio rápido al sistema de archivos mediante la creación de un archivo llamado éxito. En el siguiente paso, usted será capaz de utilizar este archivo para determinar si el proceso tiene éxito editorial:

touch /SUCCESS

  • táctil / ÉXITO

Salir fuera del contenedor acoplable:

exit

    salida

El siguiente comando crea una imagen llamada nueva prueba de imagen en base a la imagen ya está en ejecución, además de los cambios que ha realizado. En nuestro caso, la adición del archivo / ÉXITO está incluido en la nueva imagen.

confirmar el cambio:

docker commit $(docker ps -lq) test-image

  • ventana acoplable comprometerse $ (ps ventana acoplable -lq) prueba de imagen

En este punto, la imagen sólo existe a nivel local. Ahora se puede empujar al nuevo registro que ha creado. Inicie sesión en su registro acoplable:

docker login https://example.com

  • ventana acoplable entrada https://example.com

Introduzca el nombre de usuario y la contraseña correspondiente de antes. A continuación, se etiquetará la imagen con la ubicación del registro privado con el fin de empujar a la misma:

docker tag test-image example.comest-image

  • etiqueta de ventana acoplable prueba de imagen example.comest-image

Empuje la imagen recién marcado en el registro:

docker push example.comest-image

  • cargador de muelle de empuje example.comest-image

su salida será similar a la siguiente:

OutputThe push refers to a repository [example.comest-image]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...

Usted ha comprobado que la autenticación de asas del registro de usuarios, y permite a los usuarios autenticados para empujar imágenes para el registro. A continuación, se confirmará que son capaces de extraer imágenes desde el registro también.

Paso 7 – Tirando De Su privada acoplable Registro

retorno al servidor de registro de modo que usted puede probar tirando de la imagen desde el cliente de servidor de . También es posible probar esto desde un tercer servidor.

Conectarse con el nombre de usuario y contraseña establecido con anterioridad:

docker login https://example.com

  • ventana acoplable entrada https://example.com

Ahora está listo para tirar de la imagen. Utilice su nombre de dominio y nombre de la imagen, que te han etiquetado en el paso anterior:

docker pull example.comest-image

  • example.comest-image cargador de muelle de tracción

acoplable se descarga la imagen y volver al indicador. Si ejecuta la imagen en el servidor de registro verá el archivo de confirmación que creó anteriormente está ahí:

docker run -it example.comest-image /bin/bash

  • ventana acoplable plazo -es example.comest-image / bin / bash

Lista

sus archivos dentro de la fiesta shell: ls

ls

verá el archivo de confirmación que ha creado para esta imagen:

SUCCESS bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

tienes configuración final de un registro seguro para que los usuarios pueden empujar y tirar imágenes personalizadas.

Conclusión

En este tutorial te prepara su propio registro del estibador privada, y publicó una imagen de estibador. Como se mencionó en la introducción, también se puede utilizar TravisCI o una herramienta similar a automatizar CI empujando a un registro privado directamente. Mediante el aprovechamiento de estibador y registros en su flujo de trabajo, puede asegurarse de que la imagen que contiene el código dará como resultado el mismo comportamiento en cualquier máquina, ya sea en la producción o en el desarrollo. Para obtener más información sobre cómo escribir archivos Docker, se puede leer este tutorial acoplable explicar el proceso.