GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo montar un directorio de host en un contenedor Docker

Docker proporciona herramientas para unir los sistemas de archivos de los contenedores y el sistema operativo host que ejecuta el contenedor, como los montajes y volúmenes de enlace. Estos pueden ser muy útiles tanto en entornos de desarrollo como de producción.

¿Por qué montar desde el host?

En general, con Docker, querrá que las imágenes se ejecuten independientemente del sistema host. Si desea, por ejemplo, actualizar el código de una aplicación o los archivos de configuración, es probable que desee crear una nueva versión del contenedor y volver a implementar. Esto le permite escalar y mover imágenes rápidamente sin preocuparse por el hardware en el que se ejecutan.

Sin embargo, en un entorno de desarrollo, puede ser muy útil poder montar directamente un directorio para habilitar la recarga en caliente de la configuración o el código. Por ejemplo, puede estar trabajando en un archivo JS o un complemento de PHP que puede arrastrar y soltar en el contenedor. O es posible que desee montar un directorio de configuración NGINX completo para que funcione en su sitio web. Sea cual sea su caso de uso, montar archivos no es una mala solución.

También es útil en producción, si tiene servicios de host que dependen de archivos en contenedores. Por ejemplo, puede tener un servicio de ingesta y agregación de registros que preferiría que los archivos de registro del contenedor estuvieran en un directorio accesible desde el host. Si bien es probable que haya algunas soluciones puras en Docker para sus problemas, a veces es más sencillo simplemente montar un volumen.

Compatibilidad con macOS

Nota:dado que los montajes se manejan a través de la API de Docker, funcionarán independientemente del sistema operativo host. Sin embargo, macOS tiene protecciones adicionales y los montajes fuera de algunos directorios de host pueden fallar con "montajes denegados" en tiempo de ejecución. Esto incluye /Users , que cubre la mayoría de las operaciones, pero si lo necesita, puede solucionarlo en la configuración de Docker en Preferencias> Recursos> Uso compartido de archivos añadiendo el directorio de destino a la lista.

Montar un directorio de host

Crear un montaje de enlace es bastante simple. Agréguelo con --mount type=bind marca al inicio, especificando un directorio de origen y destino para montar.

docker run -d 
-it 
--name container 
--mount type=bind,source=/nginxconfig,target=/etc/nginx 
nginx:latest

Los montajes de enlace son los más simples, pero Docker proporciona la API de volumen para administrar este tipo de montajes un poco mejor. Docker administrará los datos almacenados y el directorio de volúmenes se creará automáticamente en el directorio de Docker. Es posible que esto no sea lo que desea si tiene un directorio existente en mente, pero este método es mejor ya que no depende de la estructura de archivos del sistema operativo host.

docker volume create nginx-config

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

También puede usar Docker Compose para definir volúmenes:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx/
volumes:
  nginx-config:

Estos se almacenan en un formato estándar accesible para Linux:

/var/lib/docker/volumes/volumeID/_data

Sin embargo, en macOS, deberá conectarse a la máquina virtual Docker para poder ver los volúmenes.

RELACIONADO: ¿Qué son los volúmenes de Docker y cómo se usan?

Montaje de archivos individuales

Montar directorios completos funciona bien cuando desea editar una gran cantidad de archivos de configuración/código que están almacenados en el host. Sin embargo, a veces es posible que desee montar un solo archivo para editar, sin tocar los otros archivos.

Para hacer esto, puede ejecutar el contenedor con un montaje de enlace, que admite archivos individuales si especifica la ruta:

docker run -it 
--mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg 
nginx sh

Si tiene muchos archivos para montar de esta manera, puede colocarlos todos en el mismo directorio de host y montar ese directorio en una ubicación diferente en el contenedor. Luego puede usar enlaces simbólicos dentro del contenedor para vincular archivos en el directorio montado a la ubicación adecuada.


Docker
  1. Cómo ejecutar MySQL en un contenedor Docker

  2. Cómo usar SSH en un contenedor Docker

  3. Cómo montar o enlazar un solo archivo en un contenedor Docker

  4. Cómo asignar una IP estática a un contenedor Docker

  5. Cómo instalar Vim en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo usar SSH en contenedores Docker [paso a paso]

Cómo configurar un contenedor Apache Docker

Cómo copiar archivos entre el host y el contenedor Docker

Cómo ejecutar contenedores Docker

Cómo usar SSH en un contenedor Docker