En un entorno dockerizado, utiliza varias imágenes y trabaja con muchos contenedores. Cuando ejecuta un contenedor desde una imagen, continúa ejecutando esa versión porque las imágenes de Docker no se actualizan automáticamente. Es posible que deba actualizarlo manualmente. Siempre se recomienda ejecutar un contenedor desde la última imagen de Docker.
En esta guía, le mostraremos ejemplos prácticos de cómo actualizar un contenedor en ejecución sin tiempo de inactividad.
Requisitos
- Un nuevo servidor Ubuntu 20.04 en Atlantic.Net Cloud Platform
- Una contraseña de root configurada en su servidor
Paso 1:crear el servidor en la nube de Atlantic.Net
Primero, inicie sesión en su servidor en la nube de Atlantic.Net. Cree un nuevo servidor, eligiendo Ubuntu 20.04 como sistema operativo con al menos 2 GB de RAM. Conéctese a su servidor en la nube a través de SSH e inicie sesión con las credenciales resaltadas en la parte superior de la página.
Una vez que haya iniciado sesión en su servidor Ubuntu 20.04, ejecute el siguiente comando para actualizar su sistema base con los últimos paquetes disponibles.
apt-get update -y
Paso 2:instalar Docker CE y Docker Compose
Primero, instala todas las dependencias requeridas con el siguiente comando:
apt-get install git apt-transport-https ca-certificates curl software-properties-common -y
A continuación, agregue la clave Docker GPG y el repositorio con el siguiente comando:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Una vez que se haya agregado el repositorio, instale Docker y Docker compose con el siguiente comando:
apt-get install docker-ce docker-compose -y
Una vez que ambos paquetes estén instalados, puede continuar con el siguiente paso.
Paso 3:crear un archivo de composición de Docker
A los efectos de este tutorial, crearemos una red docker, un volumen y un archivo docker-compose.yml para implementar un contenedor Ghost.
Primero, cree una red llamada net y un volumen llamado ghost usando el siguiente comando:
docker network create net docker volume create ghost
A continuación, cree un directorio para el proyecto Ghost con el siguiente comando:
mkdir Ghost
A continuación, cambie el directorio a Ghost y cree un archivo docker-compose.yml:
cd Ghost nano docker-compose.yml
Agregue las siguientes líneas:
version: '3.5' services: ghost: image: ghost:3.36 volumes: - ghost:/var/lib/ghost/content environment: - VIRTUAL_HOST=ghost.example.com - url=http://ghost.example.com - NODE_ENV=production restart: always networks: - net volumes: ghost: external: true networks: net: external: true
Guarde y cierre el archivo cuando haya terminado.
El archivo anterior descargará la imagen de Ghost versión 3.36 y creará un contenedor de Ghost para el dominio ghost.example.com.
Paso 4:crea un contenedor fantasma
Ahora, cambie el directorio a Ghost e inicie el contenedor de Ghost usando el siguiente comando:
docker-compose up -d
Deberías obtener el siguiente resultado:
Pulling ghost (ghost:3.36)... 3.36: Pulling from library/ghost bb79b6b2107f: Pull complete 99ce436c3449: Pull complete f7bdc31da5f5: Pull complete 7a1300b9ff59: Pull complete a495c68fa838: Pull complete 6e362a39ec35: Pull complete b68b4f3c36f7: Pull complete 41f8b02d4a71: Pull complete 3ecc736ea4e5: Pull complete Digest: sha256:595c759980cd22e99037811397012908d89efb799776db222a4be6d4d892917c Status: Downloaded newer image for ghost:3.36 Creating ghost_ghost_1 ... done
Puede verificar la imagen de Ghost con el siguiente comando:
docker images
Salida:
REPOSITORY TAG IMAGE ID CREATED SIZE ghost 3.36 455ce1645479 4 months ago 440MB
También puede verificar el contenedor Ghost con el siguiente comando:
docker ps
Salida:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4b51b1aafc8 ghost:3.36 "docker-entrypoint.s…" 23 seconds ago Up 20 seconds 2368/tcp ghost_ghost_1
Paso 5:actualice el archivo de composición de Docker
En esta sección, actualizaremos el archivo de redacción de Docker y cambiaremos la versión de Ghost de 3.36 a 3.37.1:
nano docker-compose.yml
Realice los siguientes cambios:
version: '3.5' services: ghost: image: ghost:3.37.1 volumes: - ghost:/var/lib/ghost/content environment: - VIRTUAL_HOST=ghost.example.com - url=http://ghost.example.com - NODE_ENV=production restart: always networks: - net volumes: ghost: external: true networks: net: external: true
Guarde y cierre el archivo cuando haya terminado.
Paso 6:lanzar un nuevo contenedor fantasma
Ahora, usaremos el método de escalado para crear un nuevo contenedor Ghost sin afectar el contenedor Ghost anterior. Puedes hacerlo con el siguiente comando:
cd Ghost docker-compose up -d --scale ghost=2 --no-recreate
Deberías obtener el siguiente resultado:
Pulling ghost (ghost:3.37.1)... 3.37.1: Pulling from library/ghost bb79b6b2107f: Already exists 99ce436c3449: Already exists 7f4b5e228565: Pull complete de71eab7febf: Pull complete 29961d2eb573: Pull complete 923f84e249ab: Pull complete dfad6f73fc3d: Pull complete b16cf83b3022: Pull complete 387b2254843c: Pull complete Digest: sha256:fad0c2631cbba3d6c61da6fa5ef39da201780f2ae64ce51f3d5ebb412ca2564b Status: Downloaded newer image for ghost:3.37.1 Starting ghost_ghost_1 ... done Creating ghost_ghost_2 ... done
Puede verificar la nueva imagen de Ghost con el siguiente comando:
docker images
Salida:
REPOSITORY TAG IMAGE ID CREATED SIZE ghost 3.37.1 c64d108acdfe 3 months ago 439MB ghost 3.36 455ce1645479 4 months ago 440MB
También puede verificar el nuevo contenedor Ghost con el siguiente comando:
docker ps
Salida:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c21550f39440 ghost:3.37.1 "docker-entrypoint.s…" 33 seconds ago Up 31 seconds 2368/tcp ghost_ghost_2 d4b51b1aafc8 ghost:3.36 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 2368/tcp ghost_ghost_1
Paso 7:Escale el nuevo contenedor fantasma
En este punto, ambos contenedores de Ghost se ejecutan con la misma configuración. Ahora, nos detendremos y eliminaremos el antiguo contenedor Ghost.
docker container stop ghost_ghost_1 docker container rm ghost_ghost_1
Ahora, ejecute el siguiente comando para reducir la configuración a su configuración original:
cd Ghost docker-compose up -d --scale ghost=1 --no-recreate
También puede consultar el nuevo registro de contenedores de Ghost para obtener más información.
docker logs ghost_ghost_2
Salida:
[2021-03-05 04:50:13] INFO Blog is in maintenance mode. [2021-03-05 04:50:13] INFO Ghost is running in production... [2021-03-05 04:50:13] INFO Your site is now available on http://ghost.example.com/ [2021-03-05 04:50:13] INFO Ctrl+C to shut down [2021-03-05 04:50:13] INFO Ghost boot 3.581s [2021-03-05 04:50:13] INFO Creating database backup [2021-03-05 04:50:13] INFO Database backup written to: /var/lib/ghost/content/data/ghost.ghost.2021-03-05-04-50-13.json [2021-03-05 04:50:13] INFO Updating portal button setting to false [2021-03-05 04:50:13] INFO Blog is out of maintenance mode.
Su contenedor de Ghost ahora está actualizado con una nueva imagen de Ghost.
Conclusión
En la guía anterior, aprendió cómo actualizar el contenedor Docker sin tiempo de inactividad. ¡Comience a actualizar su contenedor Docker en el alojamiento VPS de Atlantic.Net!