Cómo Actualizar un Contenedor con Docker Compose
Cómo actualizar un contenedor con Docker Compose es un tutorial que te muestra cómo usar Docker Compose para actualizar la imagen y la configuración de un contenedor sin perder tus datos.
6 min de lectura

Docker Compose es una herramienta que te permite definir y ejecutar varios contenedores como un solo servicio. Es ideal para desarrollar y probar aplicaciones que tienen múltiples componentes, como un servidor web, una base de datos y una caché. Te mostraré cómo actualizar un contenedor con Docker Compose en unos pocos pasos sencillos. Aprenderás a modificar el Dockerfile, reconstruir la imagen y reiniciar el contenedor con la nueva configuración.
Tengo una instalación de Plausible hecha con docker-compose que llevaba casi 1 año sin actualizar; se montó siguiendo el tutorial: Instalar Plausible Google Analytics y tiene el siguiente archivo docker compose:
version: "3.3"
services:
mail:
image: bytemark/smtp
restart: always
plausible_db:
image: postgres:12
restart: always
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
plausible_events_db:
image: yandex/clickhouse-server:21.3.2.5
restart: always
volumes:
- event-data:/var/lib/clickhouse
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
plausible:
image: plausible/analytics:latest
restart: always
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
- mail
ports:
- 8000:8000
env_file:
- plausible-conf.env
volumes:
db-data:
driver: local
event-data:
driver: local
geoip:
driver: localExplicación del Docker Compose de Plausible
Este es un archivo Docker Compose escrito en formato YAML, que describe una aplicación multi-contenedor compuesta por los servicios de Plausible: mail, plausible_db, plausible_events_db y plausible.
El servicio mail usa la imagen bytemark/smtp para proporcionar un servidor SMTP (Simple Mail Transfer Protocol) para el envío de correos electrónicos.
El servicio plausible_db usa la imagen postgres:12 para proporcionar un servidor de base de datos PostgreSQL. Almacena sus datos en un volumen de Docker llamado db-data y establece la variable de entorno POSTGRES_PASSWORD en “postgres” para la autenticación.
El servicio plausible_events_db usa la imagen yandex/clickhouse-server:21.3.2.5 para proporcionar un servidor de base de datos ClickHouse destinado a almacenar los datos de eventos. Guarda sus datos en un volumen de Docker llamado event-data y monta dos archivos de configuración desde el sistema de archivos local. También establece el ulimit nofile para permitir un mayor número de archivos abiertos.
El servicio plausible usa la imagen plausible/analytics:latest para proporcionar una plataforma de analítica web. Depende de los servicios plausible_db, plausible_events_db y mail, y expone el puerto 8000 al host. También utiliza un archivo de entorno plausible-conf.env para establecer ciertas variables de configuración. Por último, ejecuta un comando para inicializar la base de datos, correr las migraciones, crear un usuario administrador e iniciar la aplicación.
El archivo define tres volúmenes de Docker con nombre, db-data, event-data y geoip, que se pueden usar para persistir datos entre reinicios de los contenedores.
Todos los servicios tienen la opción restart establecida en always, lo que garantiza que se reinicien automáticamente si fallan o si el demonio de Docker se reinicia.
Qué se Actualizará
Si dejo el archivo Docker Compose intacto, el único contenedor que recibirá una actualización es el servicio plausible, que ejecuta la última versión de la imagen plausible/analytics. Esto es precisamente lo que llevaba tiempo esperando: una oportunidad de aprovechar todo el potencial de las últimas funciones y mejoras.
Por supuesto, si quieres actualizar también los demás contenedores, ¡adelante! Solo asegúrate de descargar la imagen más reciente con el tag latest o de especificar la versión exacta de las imágenes postgres:12 y yandex/clickhouse-server:21.3.2.5. Por suerte, en mi caso estas imágenes ya están fijadas a una versión concreta, así que el comando de Docker descargará exactamente la imagen que necesito para que todo funcione sin problemas.
Qué Pasará con los Datos
Los datos de Plausible Analytics se guardan en volúmenes, así que si revisas el archivo yml verás:
volumes:
- db-data:/var/lib/postgresql/data
volumes:
- event-data:/var/lib/clickhouse
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:roLos datos reales no están en la imagen de Docker sino en la propia VM, así que simplemente se retomarán.
Ejecutar los Comandos de Actualización
Descargar las Últimas Imágenes de Docker
En función de lo que hayas modificado, necesitas ejecutar:
docker compose pullEste comando descargará las imágenes que están en el docker compose según sus tags; en mi caso solo actualizará plausible/analytics:latest
A continuación está la salida real:

Recrear las Imágenes de Docker
Ahora que tienes las últimas imágenes de Docker descargadas, solo es cuestión de recrear los contenedores para usar las novedades. Para ello, simplemente ejecuta:
docker compose up -dCuando ejecutas docker-compose up -d, Docker Compose creará e iniciará los contenedores de todos los servicios definidos en el archivo docker-compose.yml. También creará las redes y los volúmenes necesarios si están definidos en el archivo.
El flag -d le indica a Docker Compose que ejecute los contenedores en modo detached, lo que significa que se ejecutarán en segundo plano y no estarán vinculados a la terminal. Esto te permite seguir usando la terminal para otras tareas mientras los contenedores están en marcha.
La salida será:

Verificar que los Contenedores Están en Ejecución
Una vez iniciados los contenedores, puedes usar el comando docker-compose ps para comprobar su estado y verificar que se ejecutan como esperabas. También puedes usar otros comandos de Docker, como docker logs y docker exec, para interactuar con los contenedores y solucionar cualquier problema que pueda surgir.
docker-compose psSalida:
docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
plausible-mail-1 docker-entrypoint.sh exim ... Up 25/tcp
plausible-plausible-1 /entrypoint.sh sh -c sleep ... Up 0.0.0.0:8000->8000/tcp,:::8000->8000/tcp
plausible-plausible_db-1 docker-entrypoint.sh postgres Up 5432/tcp
plausible-plausible_events_db-1 /entrypoint.sh Up 8123/tcp, 9000/tcp, 9009/tcpConclusiones
Eso es todo lo que necesitas hacer para tener tus contenedores de docker-compose actualizados a la versión que necesites. Para ir sobre lo seguro, puedes hacer una copia de seguridad del servidor por si algo sale mal y así poder hacer un rollback.


