una imagen hub guardar ejemplos editar como acceder docker docker-compose

hub - guardar una imagen en docker



¿Cómo lograr que Docker-compose vuelva a crear siempre contenedores a partir de imágenes nuevas? (5)

Las imágenes de mi ventana acoplable se crean en un servidor Jenkins CI y se envían a nuestro Registro privado de Docker. Mi objetivo es aprovisionar entornos con docker-compose que siempre inician el estado original de las imágenes.

Actualmente estoy usando docker-compose 1.3.2 y 1.4.0 en diferentes máquinas, pero también utilizamos versiones anteriores anteriormente.

Siempre utilicé los comandos docker-compose pull && docker-compose up -d para obtener las imágenes nuevas del registro e iniciarlas. Creo que mi comportamiento preferido funcionó como se esperaba hasta cierto punto en el tiempo, pero desde entonces docker-compose up comenzó a volver a ejecutar contenedores detenidos anteriormente en lugar de iniciar las imágenes construidas originalmente cada vez.

¿Hay alguna manera de deshacerse de este comportamiento? ¿Podría ser así uno que esté conectado en el archivo de configuración docker-compose.yml para no depender de "no olvidar" algo en la línea de comando en cada invocación?

PD. Además de encontrar una manera de lograr mi objetivo, también me encantaría saber un poco más sobre los antecedentes de este comportamiento. Creo que la idea básica de Docker es construir una infraestructura inmutable. El comportamiento actual de docker-compose parece simplemente chocar con este enfoque ... ¿o me pierdo algunos puntos aquí?


La única solución que funcionó para mí fue este comando:

docker-compose build --no-cache

Esto extraerá automáticamente una imagen nueva del repositorio y no usará la versión de caché que está preconstruida con ningún parámetro que haya estado utilizando antes.


Puede pasar --force-recreate a docker compose up , que debe usar contenedores nuevos.

Creo que el razonamiento detrás de la reutilización de contenedores es preservar cualquier cambio durante el desarrollo. Tenga en cuenta que Compose hace algo similar con los volúmenes, que también persistirá entre la recreación del contenedor (un contenedor recreado se adjuntará a los volúmenes de su predecesor). Esto puede ser útil, por ejemplo, si tiene un contenedor Redis utilizado como caché y no desea perder el caché cada vez que realiza un pequeño cambio. En otras ocasiones es simplemente confuso.

No creo que haya ninguna forma de forzar esto desde el archivo Compose.

Podría decirse que choca con los principios de infraestructura inmutable. El contraargumento es probablemente que no usas Compose en producción (todavía). Además, no estoy seguro de estar de acuerdo en que infra inmutable es la idea básica de Docker, aunque sin duda es un buen caso de uso / punto de venta.


Según la documentation oficial actual documentation hay un atajo que detiene y elimina los contenedores, las redes, los volúmenes y las imágenes creadas por arriba, si ya se han detenido o se han eliminado parcialmente, etc., también funcionará:

docker-compose down

Luego, si tiene nuevos cambios en sus imágenes o utiliza Dockerfiles:

docker-compose build --no-cache

Finalmente: docker-compose up

En un comando: docker-compose down && docker-compose build --no-cache && docker-compose up


docker-compose up --force-recreate es una opción, pero si lo está utilizando para CI, comenzaría la compilación con docker-compose rm -f para detener y eliminar los contenedores y volúmenes (luego seguir con pull y arriba).

Esto es lo que uso:

docker-compose rm -f docker-compose pull docker-compose up --build -d # Run some tests ./tests docker-compose stop -t 1

La razón por la que se recrean los contenedores es para preservar cualquier volumen de datos que pueda usarse (y también se up mucho más rápido).

Si está haciendo CI, no quiere eso, por lo que simplemente eliminar todo debería obtener lo que desea.

Actualización: use up --build que se agregó en docker-compose 1.7


$docker-compose build

Si hay algo nuevo, será reconstruido.