Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Registry Docker


Para generar nuestra imágen base de gentoo es tan sencillo como bajarnos el stage3 de la web de gentoo e importarlo como imagen Docker:

curl http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20150723.tar.bz2| bzcat | docker import - 'gentoo'
docker run -ti gentoo /bin/bash

Si queremos tener nuestro propio github de imágenes de docker debemos instalar registry.

Este se puede configurar de dos modos:

  • TLS: Idóneo para entornos en producción
  • TCP: Testing

Si queremos utilizar TCP debemos modificar la config de Docker, estamos indicando en el servidor de cómputo que puede conectarse sin TLS al servidor de registry:

vi /etc/conf.d/docker
DOCKER_OPTS="--insecure-registry=registry.alfaexploit.com:5000"

/etc/init.d/docker stop
/etc/init.d/docker start

En cambio si estamos montando un servidor que va a pasar a producción tenemos dos opciones:

  • Comprar un certificado TLS: Solo hay que configurar la parte del servidor.
  • Auto-generar un certificado: Hay que configurar el servidor y los clientes.

Yo voy a optar por autogenerarlo:

mkdir -p /var/lib/docker/certs
cd /var/lib/docker/certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry.alfaexploit.com.key -x509 -days 365 -out registry.alfaexploit.com.crt
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:AAAAAAA
Locality Name (eg, city) []:BBBBBB
Organization Name (eg, company) [Internet Widgits Pty Ltd]:alfaexploit.com
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:registry.alfaexploit.com
Email Address []:[email protected]

En cada uno de los nodos de cómputo (el propio servidor también) metemos el certificado autofirmado como de confianza:

mkdir -p /etc/docker/certs.d/registry.alfaexploit.com:5000/
cp /var/lib/docker/certs/registry.alfaexploit.com.crt /etc/docker/certs.d/registry.alfaexploit.com:5000/ca.crt
/etc/init.d/docker stop
/etc/init.d/docker start

NOTA: Por supuesto registry.alfaexploit.com debe resolver al servidor de cómputo donde esté el contenedor con registry.

Filtramos el acceso a nuestro servidor registry por iptables tanto en servidores de testing como en servidores en producción:

iptables -I INPUT 1 -s TRUSTED_HOST -p tcp --dport 5000 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 5000 -j DROP

Si se ha configurado con TCP plano:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

Si se ha configurado TLS:

docker run -d -p 5000:5000 -v /var/lib/docker/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.alfaexploit.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.alfaexploit.com.key --restart=always --name registry registry:2

Por defecto las imágenes se almacenan dentro del contenedor, si queremos hacerlo en un directorio externo podemos hacerlo utilizando volúmenes:

docker run -d -p 5000:5000 -v /var/lib/docker/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.alfaexploit.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.alfaexploit.com.key -v /myregistrydata:/var/lib/registry -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry --restart=always --name registry registry:2

Podemos ver las imágenes locales, para subirla al repo hay que tagearla indicando el servidor registry y el puerto:

docker ps
CONTAINER ID        IMAGE                      COMMAND                CREATED              STATUS              PORTS                                                                         NAMES
e15dac3ce5a1        registry:2              "registry cmd/regist   23 seconds ago        Restarting (1) 7 seconds ago   0.0.0.0:5000->5000/tcp   registry            

docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED    VIRTUAL SIZE
gentoo/mysql               latest              fd8d51641254        3 days ago    1.542 GB
gentoo/updated_sinpasswd   latest              c3b9f653bf61        3 days ago    1.175 GB
gentoo_imported            latest              b1c4c04c1d2b        3 days ago    1.345 GB
gentoo/updated             latest              4eedf047deb9        3 days ago    1.175 GB
gentoo                     latest              264d2b032543        3 days ago    773.1 MB
registry                   2                   b4ad0b763f11        2 weeks ago    548.6 MB

docker tag gentoo/mysql registry.alfaexploit.com:5000/kr0m/gentoo_mysql
docker push registry.alfaexploit.com:5000/kr0m/gentoo_mysql

Efectivamente ahora tenemos una imágen nueva que se descargaría del server registry:

docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.alfaexploit.com:5000/kr0m/gentoo_apache   latest              5e8bc79dc6de 3 days ago          1.187 GB

Para desplegar nuestro contenedor en otro nodo de cómputo:

docker run -i -t registry.alfaexploit.com:5000/kr0m/gentoo_mysql /bin/bash

Si hemos configurado TLS debemos aceptar nuestra CA como de confianza en cada nodo de cómputo:

mkdir -p /etc/docker/certs.d/registry.alfaexploit.com:5000/
scp [email protected]:/etc/docker/certs.d/registry.alfaexploit.com:5000/ca.crt /etc/docker/certs.d/registry.alfaexploit.com:5000/

/etc/init.d/docker stop
/etc/init.d/docker start

Autor: Kr0m -- 19/08/2015 22:08:28