Cómo usar docker container create para preparar contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar el comando docker create para preparar contenedores Docker sin iniciarlos inmediatamente. Esto te permitirá configurar contenedores y volúmenes antes de su ejecución. Comenzarás creando un contenedor a partir de la imagen de Ubuntu, verificando su estado de creación y luego iniciando y conectándote al contenedor creado.

Además, explorarás cómo inicializar un volumen utilizando docker create y posteriormente utilizar este volumen inicializado en otro contenedor. Esta experiencia práctica demostrará la flexibilidad y el control que ofrece el comando docker create en la gestión del ciclo de vida de los contenedores y la persistencia de datos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/ls -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/ps -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/start -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/attach -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/create -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/pull -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/images -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} docker/volume -.-> lab-555106{{"Cómo usar docker container create para preparar contenedores"}} end

Crear un contenedor sin iniciarlo

En este paso, aprenderás cómo crear un contenedor Docker sin iniciarlo inmediatamente. Esto es útil cuando deseas configurar el contenedor o sus volúmenes antes de ejecutarlo.

Primero, descargaremos la imagen ubuntu desde Docker Hub. Esta imagen se utilizará para crear nuestro contenedor.

docker pull ubuntu:latest

Deberías ver una salida que indica que la imagen se está descargando. Una vez completada la descarga, puedes verificar que la imagen está disponible localmente listando las imágenes.

docker images

Ahora, crearemos un contenedor llamado my-ubuntu-container a partir de la imagen ubuntu. Usaremos el comando docker create para esto. Las banderas -it se usan típicamente para contenedores interactivos, pero docker create solo configura el contenedor, no lo ejecuta. Las incluimos aquí por consistencia con la forma en que eventualmente podrías ejecutar el contenedor.

docker create -it --name my-ubuntu-container ubuntu:latest

El comando docker create crea una capa de contenedor escribible sobre la imagen especificada y la prepara para ejecutar el comando indicado. No inicia el contenedor. Deberías ver una cadena larga de caracteres como salida, que es el ID del contenedor.

Para verificar que el contenedor ha sido creado pero no está en ejecución, puedes listar todos los contenedores, incluyendo los detenidos.

docker ps -a

En la salida, deberías ver un contenedor llamado my-ubuntu-container con un estado Created. Esto confirma que el contenedor se ha creado exitosamente pero aún no se está ejecutando.

Iniciar el contenedor creado y conectarse a él

En el paso anterior, creaste un contenedor Docker llamado my-ubuntu-container pero no lo iniciaste. En este paso, aprenderás cómo iniciar este contenedor creado y conectar tu terminal a sus flujos estándar de entrada, salida y error.

Para iniciar el contenedor, usa el comando docker start seguido del nombre del contenedor.

docker start my-ubuntu-container

Este comando inicia el contenedor. Sin embargo, por defecto se ejecuta en segundo plano. Para interactuar con él, necesitas conectarte.

Para conectarte al contenedor en ejecución, usa el comando docker attach seguido del nombre del contenedor.

docker attach my-ubuntu-container

Después de ejecutar este comando, tu terminal se conectará al shell del contenedor. Deberías ver un prompt de comandos similar al del interior del contenedor Ubuntu, típicamente algo como root@<container-id>:/#.

Ahora que estás dentro del contenedor, puedes ejecutar comandos en él. Por ejemplo, verifiquemos la versión del sistema operativo.

lsb_release -a

Deberías ver una salida mostrando la versión de Ubuntu que se ejecuta dentro del contenedor.

Para salir del contenedor sin detenerlo, presiona Ctrl + P seguido de Ctrl + Q. Esto desconecta tu terminal del contenedor, dejándolo ejecutándose en segundo plano.

Si simplemente escribes exit o presionas Ctrl + D mientras estás conectado, el contenedor se detendrá.

Después de desconectarte, puedes verificar que el contenedor sigue ejecutándose listando los contenedores activos.

docker ps

Deberías ver my-ubuntu-container listado con un estado que indica que está en ejecución.

Inicializar un volumen usando docker create

En este paso, aprenderás cómo inicializar un volumen de Docker usando el comando docker create. Este método te permite crear un contenedor específicamente para poblar un volumen con datos iniciales de la imagen del contenedor.

Primero, creemos un nuevo contenedor llamado volume-initializer a partir de la imagen ubuntu. Este contenedor se usará temporalmente para inicializar el volumen. Usaremos la bandera -v para especificar el volumen que queremos inicializar y su punto de montaje dentro del contenedor. Nombraremos el volumen my-initialized-volume y lo montaremos en /app_data dentro del contenedor.

docker create -v my-initialized-volume:/app_data --name volume-initializer ubuntu:latest

Este comando crea el contenedor y el volumen si no existe previamente. La parte -v my-initialized-volume:/app_data le indica a Docker que cree un volumen llamado my-initialized-volume y lo monte en el directorio /app_data dentro del contenedor.

Ahora, iniciemos este contenedor. Cuando un contenedor con volumen se inicia por primera vez, si el volumen está vacío, Docker copia el contenido del directorio especificado por el punto de montaje desde la imagen al volumen.

docker start volume-initializer

Como este contenedor es solo para inicialización y no tiene un proceso de larga duración, probablemente se iniciará y luego se detendrá inmediatamente.

Puedes verificar que el contenedor se ha detenido listando todos los contenedores.

docker ps -a

Deberías ver volume-initializer con un estado de Exited.

Para confirmar que el volumen my-initialized-volume ha sido creado, puedes listar todos los volúmenes de Docker.

docker volume ls

Deberías ver my-initialized-volume en la lista de volúmenes.

En este punto, el volumen my-initialized-volume contiene los datos iniciales que estaban presentes en el directorio /app_data de la imagen ubuntu:latest.

Usar un volumen inicializado por docker create en otro contenedor

En el paso anterior, inicializaste un volumen de Docker llamado my-initialized-volume creando e iniciando un contenedor temporal. Ahora aprenderás cómo usar este volumen inicializado en un contenedor diferente. Esto demuestra cómo los volúmenes pueden persistir datos y compartirse entre contenedores.

Primero, creemos un nuevo contenedor llamado data-consumer a partir de la imagen ubuntu. Esta vez, ejecutaremos el contenedor directamente y montaremos el volumen existente my-initialized-volume en el directorio /data dentro de este nuevo contenedor.

docker run -it --name data-consumer -v my-initialized-volume:/data ubuntu:latest /bin/bash

Analicemos este comando:

  • docker run: Este comando crea e inicia un nuevo contenedor.
  • -it: Estas banderas asignan una pseudo-TTY y mantienen stdin abierto, permitiendo uso interactivo.
  • --name data-consumer: Asigna el nombre data-consumer al nuevo contenedor.
  • -v my-initialized-volume:/data: Parte crucial. Monta el volumen existente my-initialized-volume en el directorio /data dentro del contenedor data-consumer.
  • ubuntu:latest: Especifica la imagen a usar para el contenedor.
  • /bin/bash: Comando a ejecutar dentro del contenedor, que inicia un shell bash.

Al ejecutar este comando, estarás conectado al shell bash dentro del contenedor data-consumer.

Ahora que estás dentro del contenedor data-consumer, navega al directorio /data, donde está montado my-initialized-volume.

cd /data

Puedes listar el contenido de este directorio para ver los datos inicializados en el paso anterior. El contenido exacto dependerá de lo que hubiera en el directorio /app_data de la imagen ubuntu:latest cuando se inicializó el volumen.

ls -l

Deberías ver archivos y directorios copiados desde el directorio /app_data de la imagen Ubuntu al volumen my-initialized-volume. Esto confirma que el volumen se inicializó correctamente y ahora está siendo usado por este nuevo contenedor.

Para salir del contenedor data-consumer, simplemente escribe exit.

exit

Esto detendrá el contenedor data-consumer y te devolverá a la terminal de tu máquina host.

Puedes verificar que el contenedor data-consumer ha terminado listando todos los contenedores.

docker ps -a

Deberías ver data-consumer con estado Exited. El volumen my-initialized-volume sigue existiendo y conserva los datos.

Resumen

En este laboratorio, aprendiste a utilizar el comando docker create para preparar un contenedor Docker sin iniciarlo inmediatamente. Esto incluyó:

  1. Descargar una imagen
  2. Crear un contenedor a partir de esa imagen usando docker create
  3. Verificar su estado como "Created"

Posteriormente, aprendiste a iniciar el contenedor creado y conectarte a él, demostrando la separación entre la creación y ejecución de contenedores.

Además, el laboratorio cubrió:

  • La inicialización de un volumen Docker usando docker create
  • El uso posterior de este volumen inicializado en otro contenedor

Esto ilustró cómo docker create puede utilizarse para configurar componentes de infraestructura como volúmenes antes de que sean montados y utilizados por contenedores en ejecución.