Configuración de una registry
privada para desarrollo
.
Todas las ejecuciones sobre el shell
se definen de la siguiente manera:
> [command] ...
El signo mayor
(>
) NO se debe incluir, éste indica que la línea debe ser ejecutada dentro del contexto de un shell
.
El proyecto se gestiona a partir de repositorio de tipo git
, que se ecuentra en la siguiente url
:
https://github.com/alejandrobernardis/docker-registry
Para realizar el despliegue, clonamos el repositorio en modo sólo lectura:
> git clone https://github.com/alejandrobernardis/docker-registry.git
> tree -a --dirsfirst
/data/registry
├── /master
│ ├── /auth
│ │ └── htpasswd
│ ├── /cache
│ ├── /data
│ └── config.yml
├── docker-compose.yml
└── .env
- master: configuración de la
registry
- auth: configuración de la
autenticación
, el archivohtpasswd
contiene todos los usuarios y contraseñas permitidos en laregistry
. - cache: persistencia del
cache
medianteredis
. - data: persistencia de los
repositorios
. - config.yml: configuración base.
- auth: configuración de la
- docker-compose.yml: configuración de los
servicios
a desplegar. - .env: configuración de las
variables de entorno
a desplegar.
⚠️ ADVERTENCIADentro de la estructura se encuentra un archivo llamado
installer.sh
, al ejecutarlo, éste eliminará todo el contenido del directorio/data/registry/master
.La ejecución del mismo será resonsabilidad de quién lo haga.
Definición de los servicios a desplegar mediante la utilidad docker-compose
, para mayor información visitar la documentación oficial: https://docs.docker.com/registry/deploying/
El archivo define básicamente 3 servicios:
- master (registry) definición de la
registry
. - master_cache (redis) implementación de un
cache
mediante el uso deredis
. - master_web (registry-browser) interfaz web para la exploración del contenido de la
registry
.
version: '3.4'
x-restart: &restart
restart: unless-stopped
services:
master:
<<: *restart
image: registry:latest
ports:
- ${PORT}:5000
...
master_cache:
<<: *restart
image: redis:latest
...
master_web:
<<: *restart
image: registry-browser:latest
ports:
- ${PORT_UI}:8080
...
networks:
registry:
external:
name: registry
Archivo 📄 docker-compose.yml
Definición de los valores globales de la configuración del archivo docker-compose.yml
.
# WARNING! no editar.
COMPOSE_PROJECT_NAME=registry
COMPOSE_FILE=docker-compose.yml
# .env
HOST=hostname.local
PORT=5000
PORT_UI=5002
MASTER_LOCAL=master.local
MASTER_CACHE_LOCAL=master-cache.local
MASTER_WEB_LOCAL=master-web.local
BASEPATH=/data/registry/master
REDIS_PASSWORD=***
Archivo 📄 .env
La definicón de este archivo apunta a establecer una configuración base para el despliegue de la registry
, para mayor información visitar la documentación oficial: https://docs.docker.com/registry/configuration/
version: 0.1
log:
accesslog:
disabled: false
level: debug
...
storage:
cache:
blobdescriptor: redis
filesystem:
rootdirectory: /var/lib/registry
maxthreads: 100
delete:
enabled: true
auth:
htpasswd:
...
http:
addr: :5000
...
redis:
...
Archivo 📄 master/config.yml
La gestión de las crendenciales se realiza mediante la utilidad de apache htpasswd
, para mayor información visitar la documentación oficial: https://httpd.apache.org/docs/current/programs/htpasswd.html
> htpasswd -B /data/registry/master/auth/htpasswd <username>
New password:
Re-type new password:
Adding password for user <username>
> htpasswd -D /data/registry/master/auth/htpasswd <username>
Deleting password for user <username>
username | password |
---|---|
admin | y34r2.19g= |
... | ... |
Verificación de los usuarios habilitados:
> grep -Po '^\w+' /data/registry/master/auth/htpasswd | awk '{print " - " $1}'
- admin
- ...
> docker-compose --compatibility up -d
Modo --compatibility
> docker-compose down
> docker-compose ps
> git checkout -f . && git pull --rebase --stat origin master
Se requiere la verisón 1.20.0+
, para mayor información visitar la documentación oficial: https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-mode
docker-compose
1.20.0 introduces a new--compatibility
flag designed to help developers transition to version 3 more easily. ...
# verificamos la versión
> docker-compose --version
# descargamos el binario
> wget https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
# lo movemos a su destino
> mv -f docker-compose-Linux-x86_64 /usr/bin/docker-compose
# le asignamos privilegios de ejecución
> chmod a+x /usr/bin/docker-compose
> docker exec -ti registry_master_1 sh -c "/bin/registry garbage-collect --dry-run /etc/docker/registry/config.yml"
Leer:
> docker exec -ti registry_master_1 sh -c "cat /etc/docker/registry/config.yml"
> nano /etc/docker/daemon.json
Agregar la siguiente línea:
{
"...": "...",
"insecure-registries": ["hostname.local:5000","192.168.1.100:5000"]
}
Reiniciar el servicio:
> systemctl daemon-reload && systemctl restart docker
Verificar el cambio:
> docker info
...
Server Version: 18.09.1
...
Name: HOSTNAME
...
Insecure Registries:
hostname.local:5000
192.168.1.100:5000
127.0.0.0/8
Live Restore Enabled: false
...
> yum provides \*bin/htpasswd
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
...
httpd-tools-2.4.6-80.el7.centos.x86_64 : Tools for use with the Apache HTTP Server
Repo : centos
Matched from:
Filename : /usr/bin/htpasswd
...
> yum install httpd-tools
...
- Implementar autenticación por token