Cómo compartir datos entre el contenedor Docker y el host

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Montaje enlazado de un volumen
  • Paso 2: Acceso a los datos en el host
  • Conclusión
  • En general, los contenedores Docker son efímeros y se ejecutan durante el tiempo que tarda en completarse el comando emitido en el contenedor. De manera predeterminada, los datos creados dentro del contenedor solo están disponibles desde dentro del contenedor y solo mientras el contenedor está en ejecución.

    Los volúmenes de Docker se pueden usar para compartir archivos entre un sistema host y el contenedor de Docker. Por ejemplo, supongamos que desea utilizar la imagen oficial de Docker Nginx y conservar una copia permanente de los archivos de registro de Nginx para analizarlos más adelante. De forma predeterminada, la nginximagen de Docker se registrará en el /var/log/nginxdirectorio dentro del contenedor de Docker Nginx. Normalmente, no se puede acceder a ella desde el sistema de archivos del host.

    En este tutorial, exploraremos cómo hacer que los datos dentro del contenedor sean accesibles en la máquina host.

    Prerrequisitos

    Para seguir este artículo, necesitará un servidor Ubuntu 18.04 con lo siguiente:

    • Un usuario no root con sudoprivilegios, siguiendo la guía Configuración inicial del servidor con Ubuntu 18.04 .
    • Docker instalado con las instrucciones del Paso 1 y Paso 2 de Cómo instalar y usar Docker en Ubuntu 18.04 .

    Si eres nuevo en Docker, la serie El ecosistema de Docker proporciona una descripción detallada de los conceptos clave.

    Nota: Aunque los requisitos previos brindan instrucciones para instalar Docker en Ubuntu 18.04, los dockercomandos para los volúmenes de datos de Docker en este artículo deberían funcionar en otros sistemas operativos siempre que Docker esté instalado.

    Paso 1: Montaje enlazado de un volumen

    El siguiente comando creará un directorio llamado nginxlogsen el directorio de inicio de su usuario actual y lo enlazará al /var/log/nginxcontenedor:

    1. docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

    Tomemos un momento para examinar este comando en detalle:

    • --name=nginxnombra el contenedor para que podamos referirnos a él más fácilmente.
    • -dDesconecta el proceso y lo ejecuta en segundo plano. De lo contrario, solo estaríamos viendo un mensaje de Nginx vacío y no podríamos usar esta terminal hasta que cerráramos Nginx.
    • -v ~/nginxlogs:/var/log/nginxConfigura un volumen bindmount que vincula el /var/log/nginxdirectorio desde el interior del contenedor Nginx al ~/nginxlogsdirectorio en la máquina host. Docker usa un :para separar la ruta del host de la ruta del contenedor, y la ruta del host siempre aparece primero.
    • -p 5000:80Configura un reenvío de puerto. El contenedor Nginx escucha en el puerto 80de manera predeterminada. Esta bandera asigna el puerto del contenedor 80al puerto 5000del sistema host.
    • nginxespecifica que el contenedor debe construirse a partir de la imagen de Nginx, que emite el comando nginx -g "daemon off"para iniciar Nginx.

    Nota: la -vbandera es muy flexible. Puede bindmount o nombrar un volumen con solo un pequeño ajuste en la sintaxis. Si el primer argumento comienza con /o ~/, estás creando un bindmount. Quítalo y estarás nombrando el volumen.

    • -v /path:/path/in/containermonta el directorio del host, /pathen el/path/in/container
    • -v path:/path/in/containercrea un volumen nombrado pathsin relación con el host.

    Para obtener más información sobre los volúmenes con nombre, consulte Cómo compartir datos entre contenedores Docker

    Paso 2: Acceso a los datos en el host

    Ahora tenemos una copia de Nginx ejecutándose dentro de un contenedor Docker en nuestra máquina, y el puerto de nuestra máquina host 5000se asigna directamente a esa copia del puerto de Nginx 80.

    Cargue la dirección en un navegador web, utilizando la dirección IP o el nombre de host de su servidor y el número de puerto: . Debería ver:http://your_server_ip:5000

    Más interesante aún, si miramos el ~/nginxlogsdirectorio en el host, veremos el access.logcreado por el contenedor nginxque mostrará nuestra solicitud:

    1. cat ~/nginxlogs/access.log

    Esto debería mostrar algo como:

    Output203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-""Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

    Si realiza algún cambio en la ~/nginxlogscarpeta, también podrá verlo desde dentro del contenedor Docker en tiempo real.

    Conclusión

    En este tutorial, demostramos cómo crear un volumen de datos de Docker para compartir información entre un contenedor y el sistema de archivos del host. Esto resulta útil en entornos de desarrollo, donde es necesario tener acceso a los registros para la depuración. Para obtener más información sobre cómo compartir datos persistentes entre contenedores, consulte Cómo compartir datos entre contenedores de Docker .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion