Skip to content

Latest commit

 

History

History
343 lines (248 loc) · 7.67 KB

README.md

File metadata and controls

343 lines (248 loc) · 7.67 KB

🐳 DOCKER REGISTRY

Configuración de una registry privada para desarrollo.

Index

🚨 Importante 🚨

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.

☕ REGISTRY

Repositorio

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

Estructura del Repositorio

> 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 archivo htpasswd contiene todos los usuarios y contraseñas permitidos en la registry.
    • cache: persistencia del cache mediante redis.
    • data: persistencia de los repositorios.
    • config.yml: configuración base.
  • docker-compose.yml: configuración de los servicios a desplegar.
  • .env: configuración de las variables de entorno a desplegar.

⚠️ ADVERTENCIA

Dentro 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.

Compose File

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:

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

Env (environment) File

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

Config File

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

Usuarios

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

Creación de un usuario

> htpasswd -B /data/registry/master/auth/htpasswd <username>

New password:
Re-type new password:
Adding password for user <username>

Eliminación de un usuario

> htpasswd -D /data/registry/master/auth/htpasswd <username>

Deleting password for user <username>

Lista de usuarios

username password
admin y34r2.19g=
... ...

Verificación de los usuarios habilitados:

> grep -Po '^\w+' /data/registry/master/auth/htpasswd | awk '{print " - " $1}'

 - admin
 - ...

🔧 TROUBLESHOOTING

Iniciar los servicios

> docker-compose --compatibility up -d

Modo --compatibility

Detener los servicios

> docker-compose down

Visualizar los servicios

> docker-compose ps

Actualizar el repositorio

> git checkout -f . && git pull --rebase --stat origin master

Docker compose modo compatibilidad

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

Registry

Purgar

> docker exec -ti registry_master_1 sh -c "/bin/registry garbage-collect --dry-run /etc/docker/registry/config.yml"

Leer:

Ver la configuración

> docker exec -ti registry_master_1 sh -c "cat /etc/docker/registry/config.yml"

Configurar la registry en modo inseguro (scosta01 y scosta02)

> 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
...

Instalar htpasswd

> 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
...

TODO

  • Implementar autenticación por token