Administración de volúmenes de Docker

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

Esta sección cubrirá el uso de almacenes de datos persistentes en un entorno Docker llamado volúmenes. Aprenderá las características de los almacenes de datos persistentes, como la diferencia entre volúmenes internos y externos y cómo y cuándo utilizarlos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-7769{{"Administración de volúmenes de Docker"}} docker/ls -.-> lab-7769{{"Administración de volúmenes de Docker"}} docker/exec -.-> lab-7769{{"Administración de volúmenes de Docker"}} docker/inspect -.-> lab-7769{{"Administración de volúmenes de Docker"}} docker/create -.-> lab-7769{{"Administración de volúmenes de Docker"}} docker/cp -.-> lab-7769{{"Administración de volúmenes de Docker"}} docker/volume -.-> lab-7769{{"Administración de volúmenes de Docker"}} end

Gestión de volúmenes de datos

Los volúmenes de datos son una operación estándar para la persistencia de datos en Docker, y en esta sección, lo guiaré a través de las operaciones estándar en volúmenes de datos en la práctica.

Objetivo

Su objetivo es crear un volumen de datos llamado my-vol utilizando el comando docker, y agregar un archivo llamado test.txt a su volumen.

Ejemplo de resultado

A continuación, se muestra un ejemplo de lo que debería ser capaz de lograr al final de este desafío:

  1. Crear un volumen de datos llamado my-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
  1. Obtener Punto de montaje a partir de los detalles del volumen de datos.
[
  {
    "CreatedAt": "2024-01-20T17:37:33+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
    "Name": "my-vol",
    "Options": {},
    "Scope": "local"
  }
]
  1. Ir al Punto de montaje y crear el archivo test.txt.
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt

Requisitos

Para completar este desafío, necesitará:

  • Saber cómo crear un volumen de datos utilizando el comando docker.
  • Crear un archivo utilizando el usuario root.
  • Cambiar al usuario root utilizando sudo su, Establecer la contraseña del usuario root utilizando sudo passwd root.
✨ Revisar Solución y Practicar

Creación de contenedores con volumen de datos

En esta sección, crearemos contenedores utilizando volúmenes de datos de Docker y luego haremos copias de los archivos.

Objetivo

Tu objetivo es crear un volumen de Docker llamado nginx-vol, luego iniciar un contenedor llamado nginx y montarlo, y finalmente crear un archivo index.html localmente y copiarlo al contenedor nginx.

Ejemplo de resultado

A continuación, se muestra un ejemplo de lo que deberías ser capaz de lograr al final de este desafío:

  1. Crear un volumen de datos llamado nginx-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
local     nginx-vol
  1. Crear un contenedor llamado nginx basado en la imagen de nginx que montará su directorio /usr/share/nginx/html en el volumen de datos nginx-vol.
labex:~/ $ docker ps | grep nginx
c39296aaf39e   nginx     "/docker-entrypoint.…"   35 segundos atrás   Up 31 segundos   80/tcp    nginx
  1. Crear un archivo index.html local con el contenido hello world en el directorio /tmp.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
  1. Copiar el archivo index.html local al contenedor nginx.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world

Requisitos

Para completar este desafío, necesitarás:

  • Saber cómo crear un volumen de datos utilizando el comando docker.
  • Saber cómo iniciar un contenedor.
  • Saber cómo copiar archivos locales a contenedores.
✨ Revisar Solución y Practicar

Crear contenedores con Ruta del Host

En muchos casos, no estamos acostumbrados a utilizar volúmenes de datos, sino que, en cambio, utilizamos directamente el directorio nativo para la persistencia de datos. En esta sección, utilizaremos el directorio nativo para crear contenedores.

Objetivo

Tu objetivo es crear un contenedor que utilice Ruta del Host, luego copiar los archivos locales al contenedor y verificar que los archivos en ese contenedor sean los mismos que los de la Ruta del Host.

Ejemplo de resultado

A continuación, se muestra un ejemplo de lo que deberías ser capaz de lograr al final de este desafío:

  1. Crear un directorio nginx en el directorio /tmp.
labex:/tmp/ $ ls | grep nginx
nginx
  1. Iniciar el contenedor nginx-host basado en la imagen de nginx que monta el directorio /tmp/nginx en el directorio /usr/share/nginx/html del contenedor.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df   nginx     "/docker-entrypoint.…"   44 segundos atrás   Up 43 segundos   80/tcp    nginx-host
  1. Verificar los detalles de montaje específicos con el comando docker inspect.
"Mounts": [
   {
         "Type": "bind",
         "Source": "/tmp/nginx",
         "Destination": "/usr/share/nginx/html",
         "Mode": "",
         "RW": true,
         "Propagation": "rprivate"
   }
],
  1. Crear un archivo local llamado nginx.txt con el contenido hello nginx.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
  1. Copiar el archivo nginx.txt al directorio /usr/share/nginx/html del contenedor nginx-host.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
  1. Verificar el directorio /tmp/nginx en la máquina local para ver si hay un archivo nginx.txt.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx

Requisitos

Para completar este desafío, necesitarás:

  • Conocer la Ruta del Host que deseas utilizar.
  • Saber cómo utilizar algunos comandos relevantes dentro del contenedor para verificar si se puede acceder al directorio o archivo del host.
  • Saber cómo iniciar el contenedor utilizando la Ruta del Host.
  • Estar familiarizado con los comandos básicos de Linux, como cd, mkdir, touch, etc.
✨ Revisar Solución y Practicar

Compartir datos entre contenedores

En un entorno contenedorizado, a veces es necesario compartir datos de un contenedor a otro. En este caso, se pueden utilizar varias técnicas para lograr la compartición de datos, y este desafío explorará cómo compartir datos entre contenedores.

Objetivo

Tu objetivo es implementar la compartición de datos entre dos contenedores. Específicamente, utilizarás Ruta del Host para iniciar el contenedor A, luego iniciar otro contenedor B y montar el volumen de almacenamiento de A, lo que finalmente permitirá la compartición de datos entre los dos contenedores.

Ejemplo de resultado

A continuación, se muestra un ejemplo de lo que deberías ser capaz de lograr al final de este desafío:

  1. Crear un directorio /tmp/share en el host local.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
  1. Crear un contenedor llamado nginx-share basado en la imagen de nginx y montar el directorio /tmp/share local en el directorio /usr/share/nginx/html del contenedor.
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39   nginx     "/docker-entrypoint.…"   55 segundos atrás   Up 55 segundos   80/tcp    nginx-share
  1. Crear un contenedor llamado busybox-share basado en la imagen de busybox y montarlo desde el contenedor nginx-share.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681   busybox   "sh"                     43 segundos atrás   Up 42 segundos             busybox-share
  1. Crear un archivo local llamado share.txt con el contenido hello share.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
  1. Copiar el archivo share.txt al contenedor nginx-share.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
  1. Entrar al contenedor busybox-share para ver si existe el archivo share.txt.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share

Requisitos

Para completar este desafío, necesitarás:

  • Estar familiarizado con las operaciones y conceptos básicos de los contenedores de Docker.
  • Utilizar las herramientas de línea de comandos de Docker para crear, ejecutar y detener contenedores.
  • Comprender el concepto y el uso de los volúmenes de datos.
  • Comprender cómo montar un volumen de datos en un contenedor.
  • Estar familiarizado con los comandos básicos de Linux, como cd, mkdir, touch, etc.
✨ Revisar Solución y Practicar

Resumen

Felicitaciones por haber completado este desafío. Si ahora eres un experto en el uso de volúmenes de almacenamiento en contenedores, adelante.