1. Introducción

Hola a todos y bienvenidos a un nuevo post de nuestro blog!. En anteriores ocasiones registramos y descargamos imágenes Docker del registro asociado al dominio hub.docker.com. De esta forma, en el post SpringBoot-Docker creamos una imagen Docker a partir de un jar de SpringBoot y la subimos al registro oficial con el fin de compartirlo con toda la comunidad de desarrolladores. Lo que pretendemos ahora es crear nuestro propio repositorio de imágenes de forma que podremos disponer de nuestro propio registro dentro de nuestra Intranet.

En este post veremos como crear un repositorio de imágenes en donde no se requiere autenticación y otro en donde sí se requiera. Empezamos!

Os podéis descargar el código de ejemplo de mi GitHub aquí.

Tecnologías empleadas:

  • Docker 17.06.2-ce

2. Registro sin autenticación

Utilizamos la imagen registry:2 para crear nuestro repositorio de imágenes.

registry: 
  container_name: my-registry
  image: registry:2
  ports:
    - "5000:5000"

Si queremos que las imágenes se persistan dentro de nuestra máquina deberemos montar un directorio de nuestro filesystem a /var/lib/registry

- volumes
  ./mnt/registry:/var/lib/registry

Arrancamos nuestro repositorio de imágenes

docker-compose up

Para añadir una imagen a nuestro nuevo repositorio debemos crear un tag de la imagen cuyo nombre debe empezar con el host y puerto donde está escuchando nuestro registro. En nuestro caso añadimos la imagen ubuntu.

La descargamos, la etiquetamos y la subimos a nuestro repositorio.

docker pull ubuntu
docker tag ubuntu localhost:5000/myubuntuimage
docker push localhost:5000/myubuntuimage

Para verificar que la imagen se ha añadido podemos utilizar la API que nos proporciona registry para ver las imágenes añadidas.

curl http://localhost:5000/v2/_catalog

Obteniendo

{
repositories: [
“myubuntuimage”,
]
}

3. Registro con autenticación

Para crear nuestro repositorio de imágenes docker con autenticación deberemos montar dentro de nuestro contenedor un fichero con las credenciales de los usuarios cifradas en bcrypt e indicar mediante variables de entorno donde se encuentra dicho fichero.

Creamos el fichero de credenciales dentro del filesystem de nuestra máquina ./auth/httpasswd añadiendo el siguiente usuario/password jorge/1234

docker run --entrypoint htpasswd registry:2 -Bbn jorge 1234 >> auth/htpasswd

Montamos dicho fichero en el directorio /auth del filesystem del contenedor. Además mediante la variable de entorno REGISTRY_AUTH_HTPASSWD_PATH indicamos su ubicación.

registry: 
  container_name: my-registry
  image: registry:2
  volumes:
    - ./auth:/auth
  ports:
    - "5000:5000"
  environment:
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd

Arrancamos el contenedor

docker-compose up

Realizamos el login en nuestro repositorio con las credenciales jorge/1234

docker login localhost:5000

De la misma forma que hicimos en el punto anterior, para añadir una imagen a nuestro nuevo repositorio debemos crear un tag de la imagen cuyo nombre debe empezar con el host y puerto donde está escuchando nuestro registro. En nuestro caso añadimos la imagen ubuntu.

La descargamos, la etiquetamos y la subimos a nuestro repositorio.

docker pull ubuntu
docker tag ubuntu localhost:5000/myubuntuimage
docker push localhost:5000/myubuntuimage

Por último, para verificar que la imagen se ha añadido podemos utilizar la API que nos proporciona registry para ver las imágenes añadidas.

curl http://localhost:5000/v2/_catalog

Obteniendo

{
repositories: [
“myubuntuimage”,
]
}

4. Referencias