Búsqueda de sitios web

Usando docker-compose con repositorios privados


Introducción

Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Permite a los desarrolladores definir su pila de aplicaciones como un archivo YAML, lo que facilita la creación de entornos complejos con solo unos pocos comandos. Sin embargo, utilizar repositorios privados con Docker Compose puede resultar complicado. En este artículo, exploraremos cómo usar Docker Compose con repositorios privados, cubriendo diferentes métodos de autenticación y sus ejemplos.

¿Qué son los repositorios privados?

Las imágenes de Docker se pueden almacenar en repositorios públicos o privados. Los repositorios públicos están abiertos a todos, mientras que los repositorios privados requieren autenticación para acceder a ellos. Los repositorios privados se utilizan a menudo para imágenes que contienen código propietario o datos que no deberían estar disponibles públicamente. Para acceder a un repositorio privado, debe proporcionar credenciales de autenticación.

Usando Docker Compose con repositorios privados

Cuando utilice Docker Compose con repositorios privados, debe asegurarse de que el demonio Docker que se ejecuta en la máquina host tenga acceso al repositorio. Hay varias formas de lograrlo, según el método de autenticación utilizado por el repositorio.

Métodos de autenticación

Archivo Docker Config.json

El demonio Docker puede usar un archivo config.json para almacenar las credenciales de autenticación. Este archivo se puede crear manualmente o mediante el comando de inicio de sesión de Docker. Para usar un archivo config.json con Docker Compose, debe montarlo como un volumen en su contenedor. Aquí hay un ejemplo:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      volumes:
         - $HOME/.docker/config.json:/root/.docker/config.json

En este ejemplo, estamos montando el archivo config.json ubicado en el directorio de inicio del usuario en el directorio raíz del contenedor. Esto permite que el demonio Docker que se ejecuta dentro del contenedor acceda a las credenciales almacenadas en el archivo.

Variables de entorno

Algunos repositorios privados admiten la autenticación mediante variables de entorno. Este método es útil cuando no desea exponer sus credenciales en un archivo de configuración. Aquí hay un ejemplo:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      environment:
         - REGISTRY_USERNAME=username
         - REGISTRY_PASSWORD=password

En este ejemplo, configuramos las variables de entorno REGISTRY_USERNAME y REGISTRY_PASSWORD para las credenciales de autenticación. El demonio Docker que se ejecuta dentro del contenedor puede usar estas variables para autenticarse en el repositorio.

Archivo Docker Compose .env

Docker Compose le permite definir variables de entorno en un archivo .env, que se carga automáticamente cuando ejecuta el comando docker-compose. Aquí hay un ejemplo:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      env_file:
         - .env

En este ejemplo, usamos la directiva env_file para cargar variables de entorno definidas en el archivo .env. Así es como se vería el archivo .env:

REGISTRY_USERNAME=username
REGISTRY_PASSWORD=password

Este método es similar al uso de variables de entorno directamente en un archivo YAML, pero le permite mantener sus credenciales en un archivo separado.

Ejemplos

Repositorio privado con archivo Docker Config.json

Digamos que tenemos un repositorio privado alojado en Docker Hub y queremos usarlo en un archivo Docker Compose. Comenzaremos creando un archivo config.json con nuestras credenciales de autenticación:

{
   "auths": {
      "https://index.docker.io/v1/": {
         "auth": "dXNlcm5hbWU6cGFzc3dvcmQ="
		}
	}
}

En este ejemplo, utilizamos una cadena codificada en base64 para nuestras credenciales de autenticación. La cadena consta de nombre de usuario y contraseña separados por dos puntos y codificados.

Ahora, creemos un archivo Docker Compose que use nuestro repositorio privado:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      volumes:
         - $HOME/.docker/config.json:/root/.docker/config.json

En este ejemplo, estamos definiendo un servicio llamado "aplicación" que usa la imagen "myprivaterepo/myapp" de nuestro repositorio privado. También estamos montando el archivo config.json como un volumen en el contenedor para que el demonio Docker que se ejecuta dentro del contenedor pueda acceder a las credenciales.

Para ejecutar este archivo Docker Compose, podemos usar el siguiente comando:

docker-compose up

Esto iniciará el servicio de "aplicación" y extraerá la imagen de nuestro repositorio privado.

Repositorio privado con variables de entorno

Digamos que tenemos un repositorio privado alojado en un registro autohospedado y queremos usarlo en un archivo Docker Compose. Comenzaremos configurando nuestras credenciales de autenticación como variables de entorno:

export REGISTRY_USERNAME=username
export REGISTRY_PASSWORD=password

Ahora, creemos un archivo Docker Compose que use nuestro repositorio privado:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      environment:
         - REGISTRY_USERNAME=$REGISTRY_USERNAME
         - REGISTRY_PASSWORD=$REGISTRY_PASSWORD

En este ejemplo, estamos definiendo un servicio llamado "aplicación" que usa la imagen "myprivaterepo/myapp" de nuestro repositorio privado. También estamos configurando las variables de entorno REGISTRY_USERNAME y REGISTRY_PASSWORD para nuestras credenciales de autenticación.

Para ejecutar este archivo Docker Compose, podemos usar el siguiente comando:

docker-compose up

Esto iniciará el servicio de "aplicación" y extraerá la imagen de nuestro repositorio privado.

  • Repositorio privado con archivo Docker Compose .env

Digamos que tenemos un repositorio privado alojado en un registro autohospedado y queremos usarlo en un archivo Docker Compose. Comenzaremos creando un archivo .env con nuestras credenciales de autenticación:

REGISTRY_USERNAME=username
REGISTRY_PASSWORD=password

Ahora, creemos un archivo Docker Compose que use nuestro repositorio privado:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      env_file:
         - .env

En este ejemplo, estamos definiendo un servicio llamado "aplicación" que usa la imagen "myprivaterepo/myapp" de nuestro repositorio privado. También estamos usando la directiva env_file para cargar variables de entorno definidas en el archivo .env.

Para ejecutar este archivo Docker Compose, podemos usar el siguiente comando:

docker-compose up

Esto iniciará el servicio de "aplicación" y extraerá la imagen de nuestro repositorio privado.

Repositorio privado con configuraciones de Docker

Si está ejecutando Docker en un enjambre, puede usar las configuraciones de Docker para almacenar sus credenciales de autenticación. Para usar las configuraciones de Docker en Docker Compose, necesitaremos crear un archivo de configuración que contenga nuestras credenciales de autenticación:

echo "password" | docker secret create registry_password -
echo "username" | docker secret create registry_username -

Ahora, creemos un archivo Docker Compose que use nuestro repositorio privado:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      secrets:
         - registry_username
         - registry_password

En este ejemplo, estamos definiendo un servicio llamado "aplicación" que usa la imagen "myprivaterepo/myapp" de nuestro repositorio privado. También estamos usando la directiva secrets para cargar los secretos nombre_usuario_registro y contraseña_registro en el contenedor.

Para ejecutar este archivo Docker Compose, podemos usar el siguiente comando:

docker-compose up

Esto iniciará el servicio de "aplicación" y extraerá la imagen de nuestro repositorio privado.

Repositorio privado con Docker Build

Si está creando una imagen de Docker que utiliza un repositorio privado, puede usar la compilación de Docker para autenticarse en su repositorio privado. Aquí hay un ejemplo:

docker build --build-arg REGISTRY_USERNAME=username --build-arg REGISTRY_PASSWORD=password -t myprivaterepo/myapp .

En este ejemplo, estamos creando una imagen llamada "myprivaterepo/myapp" que utiliza un repositorio privado. Pasamos nuestras credenciales de autenticación como argumentos de compilación usando --build-arg.

Una vez creada la imagen, podemos usarla en nuestro archivo Docker Compose:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp

En este ejemplo, estamos definiendo un servicio llamado "aplicación" que usa la imagen "myprivaterepo/myapp" de nuestro repositorio privado.

Para ejecutar este archivo Docker Compose, podemos usar el siguiente comando:

docker-compose up

Esto iniciará el servicio de "aplicación" y utilizará la imagen de nuestro repositorio privado.

Conclusión

Usar Docker Compose con repositorios privados puede ser un desafío, pero existen varios métodos de autenticación disponibles que facilitan el acceso a sus imágenes. En este artículo, exploramos cómo usar Docker Compose con repositorios privados, cubriendo diferentes métodos de autenticación y sus ejemplos. Si sigue estos ejemplos, podrá autenticarse fácilmente en sus repositorios privados y utilizar sus imágenes en Docker Compose.