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 archivohtpasswdcontiene todos los usuarios y contraseñas permitidos en laregistry. - cache: persistencia del
cachemedianteredis. - data: persistencia de los
repositorios. - config.yml: configuración base.
- auth: configuración de la
- docker-compose.yml: configuración de los
serviciosa desplegar. - .env: configuración de las
variables de entornoa 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
cachemediante 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: registryArchivo 📄 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 -dModo --compatibility
> docker-compose down> docker-compose ps> git checkout -f . && git pull --rebase --stat origin masterSe 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-compose1.20.0 introduces a new--compatibilityflag 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.jsonAgregar la siguiente línea:
{
"...": "...",
"insecure-registries": ["hostname.local:5000","192.168.1.100:5000"]
}Reiniciar el servicio:
> systemctl daemon-reload && systemctl restart dockerVerificar 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