Configurar el contenedor de docker con ansible

¿Es una buena o mala práctica configurar el contenedor docker con ansible , desde dentro del contenedor, proporcionando un command ansible como punto de input? Usando ansible sería más fácil configurar las cosas dependiendo de algunas condiciones de búsqueda. Este command ansible también iniciaría el service provisto. ¿Es esto bueno o malo? Otra opción sería usar el script de shell, y el tercero para hacer toda la configuration en Dockerfile (propenso a errores). La última opción sería configurar algún contenedor base para usar cualquier método (manual o CM) y realizar cambios (difíciles de reproducir). ¿Cuál es la forma preferida de configurar contenedores?

La OMI, al utilizar ansible, desacoplaría la lógica empresarial de la plataforma Docker, por lo que el mismo service podría ejecutarse fácilmente en una plataforma de virtualización diferente o en un solo metal con solo un simple command ansible. Pero, ¿hay inconvenientes?

Además, ¿está aprobado configurar los contenedores en ejecución con ansible, o esto viola la doctrine del docker?

Ansible generalmente se ejecuta desde fuera del contenedor, pero no tiene que ser así, depende de lo que desee lograr. Por ejemplo, Ansible instalado localmente se usa a menudo en entornos de desarrollo pequeños, como en una computadora portátil de desarrolladores, mientras que un server independiente se utiliza para algo así como un entorno de nube donde hay múltiples sistemas, contenedores, etc.

Acabo de pasar unas semanas mirando exactamente este problema. Para la misma aplicación (basada en un tomé y mongo), he hecho los siguientes patrones:

  • Solo ansible implementando en una o más VM
  • Crear contenedores que luego ejecuten scripts ansible dentro de ellos como lo hizo
  • Usando el contenedor ansible

Los hice en ese order porque significaba pasar de simple a más complejo. Soy un gerente de producto y mis diferentes clientes se encuentran en diferentes niveles de madurez, así que tenía las mismas preocupaciones que usted. Quería una secuencia de commands repetible que funcionara tanto en máquinas virtuales (o incluso bare metal) como en entornos contenedores.

La primera solución es una buena forma de aprender. La segunda solución funciona, pero significa que sus contenedores son más grandes de lo que deberían ser. La tercera solución es mejor por las siguientes razones:

  • Básicamente te obliga a comenzar a usar roles. Si no ha comenzado a usar roles, debería hacerlo.
  • Desacopla efectivamente la lógica comercial de la window acoplable y la mantiene en ansible (incluso más que la segunda solución)
  • Si está implementando en máquinas virtuales, debería poder usar los libros de jugadas de los roles
  • Si está implementando con docker-componte, vaya hasta el contenedor ansible-push y luego suministre a su cliente un file comstackdor que pueda ejecutar
  • Si se despliega en la nube, ansible-container crea un libro de jugadas para tirar y ejecutar los contenedores (aunque todavía estoy trabajando en este)