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.
Si queremos que las imágenes se persistan dentro de nuestra máquina deberemos montar un directorio de nuestro filesystem a /var/lib/registry
Arrancamos nuestro repositorio de imágenes
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.
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
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
Realizamos el login en nuestro repositorio con las credenciales jorge/1234
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.
Obteniendo
{
repositories: [
“myubuntuimage”,
]
}