El registro de Docker es una aplicación que le permite almacenar y distribuir las imágenes de Docker internamente (dentro de su organización). Docker incluso tiene un registro público, conocido como Docker Hub, gratuito para almacenar imágenes de Docker.
Pero, el problema con el registro público de Docker es que las imágenes que carga en él se vuelven públicas. Esto no es lo que usted o su organización esperan cuando trabajan muchas horas para construir una imagen y eso se hace público.
Para superar este obstáculo, puede configurar un registro de Docker para su proyecto de forma privada para que solo usted o su organización puedan almacenar las imágenes de Docker en él y distribuirlas entre sus compañeros de trabajo.
Aquí, en esta guía técnica, discutiremos cómo configurar Docker Private Registry en CentOS 7 / Ubuntu 16.04 / Fedora 26/ 25 .
Nombre de host | Dirección IP | Sistema Operativo | Propósito |
registro.itzgeek.local | 192.168.12.10 | CentOS 7 | Actúa como servidor de registro privado de Docker |
construir.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Actúa como nodo del motor de Docker donde los desarrolladores crearán las imágenes de Docker con dockerfile o docker compose, y luego cargarán esas imágenes en el servidor de registro privado de docker anterior. |
implementar.itzgeek.local | 192.168.12.30 | Fedora 26/25 | Actúa como nodo del motor Docker donde implementamos contenedores descargados (extracción) del servidor de registro privado. |
Aquí, estoy usando un entorno mixto (SO) para demostrar. Le recomiendo que use solo un entorno homogéneo que sea fácil para solucionar los problemas que surjan. Requisitos
Instale el motor de Docker en todos sus nodos y asegúrese de que el servicio de Docker esté en funcionamiento.
LEER :Cómo instalar Docker CE en CentOS 7
LEER :Cómo instalar Docker CE en Ubuntu 16.04
LEER :Cómo instalar Docker CE en Fedora 26/25
Configurar el registro privado de Docker
Inicie sesión en el nodo de registro y extraiga la imagen de registro de Docker Hub.
[root@registry ~]# docker pull registry
Elija si desea utilizar el registro de Docker simple o seguro.
Registro simple de Docker
[root@registry ~]# docker run -dit -p 5000:5000 --name registry registry
Registro privado seguro de Docker
De forma predeterminada, el nodo Docker utiliza una conexión segura a través de TLS para cargar o descargar imágenes hacia o desde el registro privado. Puede usar certificados TLS firmados por CA o autofirmados en el servidor de registro.
Aquí, usaré un certificado autofirmado para asegurar Docker Registry. Vamos a crear un certificado autofirmado usando el siguiente comando.
[root@registry ~]# mkdir -p /certs
[root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/ca.key -x509 -days 365 -out /certs/ca.crt
Generating a 4096 bit RSA private key
............................................++
.....................................................................................................++
writing new private key to '/certs/ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:TN
Locality Name (eg, city) [Default City]:CHN
Organization Name (eg, company) [Default Company Ltd]:ITzGeek
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:registry.itzgeek.local
Email Address []:[email protected]
Reemplace “registry.itzgeek.local ” con el FQDN de su servidor de registro.
Certificado generado “ca.crt” debe colocarse en todos sus nodos de compilación/implementación para confiar en este certificado.
Inicie el contenedor de registro de Docker con la información del certificado.
[root@registry ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key registry
Ahora, tiene un contenedor de servidor de registro llamado "registro ” ejecutándose en “registry.itzgeek.local “.
[root@registry ~]# docker ps
Salida:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8641fbc895f5 registry "/entrypoint.sh /e..." 44 seconds ago Up 41 seconds 0.0.0.0:5000->5000/tcp registry
Cortafuegos
Deberá abrir los siguientes puertos en el firewall para que el registro de Docker esté disponible fuera de la red (para build.itzgeek.local /implementar.itzgeek.local )
Debe ejecutar el siguiente comando en el servidor Docker Registry (registry.itzgeek.local), depende de su sistema operativo.
Si su Docker Registry está en CentOS 7/Fedora 26/25,
[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp
[root@registry ~]# firewall-cmd --reload
Si su Docker Registry está en Ubuntu 16.04,
root@registry:~# ufw status
root@registry:~# ufw allow 5000/tcp
root@registry:~# ufw reload ufw enable
Ahora Docker Registry está listo para distribuir imágenes de Docker.
Cree y cargue una imagen de Docker en un servidor de registro privado
Inicie sesión en el nodo del motor Docker de compilación, ej. “construir.itzgeek.local ”
Crear una imagen de Docker
Vamos a crear una imagen de Docker (para un contenedor docker personalizado) para cargarla en el servidor de registro privado. Puede construir/crear un contenedor de imágenes de tres formas.
1. Compromiso
2. Dockerfile
3. Componer Docker.
Cree y mantenga su imagen acoplable lista para cargar siguiendo cualquiera de los métodos enumerados anteriormente.
LEER :Cómo crear imágenes de Docker con Docker Commit
LEER :Cómo crear imágenes de Docker con DockerFile
Creé una imagen acoplable llamada “mycentos:httpdv1.0 ” en “build.itzgeek.local ” y ahora lo cargaremos en el servidor de registro privado.
root@build:~# docker images
Salida:
Ahora, cambie el nombre de la imagen de la ventana acoplable algo así como registryserver:portnumber/image name:tag
.
Si el nombre de la imagen no coincide con el formato dado, el comando push o pull de la ventana acoplable intentará cargar o descargar la imagen desde el registro público, no desde el registro privado.
Para cambiar el nombre de la imagen de la ventana acoplable, use docker tag
comando.
root@build:~# docker tag mycentos:httpdv1.0 registry.itzgeek.local:5000/mycentos:httpdv1.0
Verifique nuevamente la lista de imágenes de Docker.
Subir una imagen de Docker
Depende del modo de comunicación (Segura o No segura ) de Docker Registry, siga cualquiera de los siguientes métodos.
No seguro (Registro Http simple)
Edite/Cree el archivo “daemon.json ” en “/etc/docker/ ” directorio.
root@build:~# vi /etc/docker/daemon.json
Agregue los siguientes contenidos en él.
{
"insecure-registries" : ["registry.itzgeek.local:5000"]
}
Seguro (autofirmado)
Copie el certificado “ca.crt ” del servidor de registro “registry.itzgeek.local ” a “/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt ” en “build.itzgeek.local “.
root@build:~# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/
root@build:~# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
En ambos casos, deberá reiniciar el servicio del motor de Docker.
root@build:~# systemctl restart docker
Sube la imagen de la ventana acoplable al servidor de registro privado usando el siguiente comando.
root@build:~# docker push registry.itzgeek.local:5000/mycentos:httpdv1.0
Descargar e implementar la imagen del contenedor Docker desde el servidor de registro privado
Inicie sesión en el nodo del motor Docker de implementación, Ex. “implementar.itzgeek.local “.
Según el modo de comunicación (seguro o no seguro) de Docker Registry, siga cualquiera de los siguientes métodos.
No seguro (Registro Http simple)
Edite/Cree el archivo “daemon.json ” en “/etc/docker/ ” directorio.
[root@deploy ~]# vi /etc/docker/daemon.json
Agregue los siguientes contenidos en él.
{
"insecure-registries" : ["registry.itzgeek.local:5000"]
}
Seguro (autofirmado)
Copie el certificado “ca.crt ” del servidor de registro “registry.itzgeek.local ” a “/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt ” en “deploy.itzgeek.local “.
[root@deploy ~]# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/
[root@deploy ~]# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
En ambos casos, deberá reiniciar el servicio del motor de Docker.
[root@deploy ~]# systemctl restart docker
Descargue la imagen de la ventana acoplable al servidor de registro privado con el siguiente comando.
[root@deploy ~]# docker pull registry.itzgeek.local:5000/mycentos:httpdv1.0
Ahora, revisa la lista de imágenes disponibles usando “imágenes acoplables ” comando
[root@deploy ~]# docker images
Salida:
Ahora la imagen de Docker está lista para su implementación.
LEER :Cómo implementar contenedores Docker:interfaz de línea de comandos
Eso es todo.