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

Cómo copiar archivos con Docker cp a su Docker Container

Si necesita copiar archivos del host Docker a su contenedor Docker, este tutorial es para usted.

En este tutorial, aprenderá a copiar archivos del host Docker a un contenedor Docker utilizando varios enfoques.

¡Vamos a por ello!

Requisitos previos

Si desea seguir paso a paso, asegúrese de tener lo siguiente:

  • Un servidor Linux. Este tutorial usa Ubuntu 18.04.5 LTS.
  • Docker instalado en el host de Linux. Este tutorial usa Docker v19.03.11. Puede confirmar su versión de Docker ejecutando docker version .
  • Cualquier imagen de Docker descargada y disponible. Este tutorial utiliza la imagen NGINX Docker más reciente disponible en Docker Hub.

Copiar archivos con docker cp Comando

Para comenzar este tutorial, aprenderá a copiar archivos del host de Docker a los contenedores utilizando docker cp dominio. El docker cp El comando copia archivos o carpetas entre un contenedor y el sistema de archivos local de su host Docker y viceversa.

Aprendamos a usar el comando cp de Docker con un ejemplo.

1. Abra una terminal en su máquina local.

2. Cree un archivo llamado miarchivo.txt usando el touch dominio. El miarchivo.txt se copiará del host docker al contenedor.

touch myfile.txt

3. Ejecute docker run dominio. La ejecución de la ventana acoplable a continuación creará un nuevo contenedor en segundo plano. El siguiente comando contiene tres parámetros que se describen a continuación:

  • d marca que ejecuta el contenedor en segundo plano y lo mantiene activo hasta que se elimine.
  • p flag publica el puerto de un contenedor 80 al host en el puerto 80 .
  • nginx será la imagen que se utilizará para ejecutar el contenedor.
sudo docker run -d -p 80:80 nginx

4. Verifique si el contenedor Docker se creó correctamente usando docker ps dominio. Después de ejecutar docker ps comando, debería ver un nuevo valor generado bajo el atributo ID DEL CONTENEDOR (en el caso siguiente ccae4670f030 ) usando la imagen NGINX que confirma que el contenedor se creó correctamente.

sudo docker ps

Antes de ejecutar el comando Docker cp, la sintaxis del comando Docker cp es:

  • CONTAINER: SRC_PATH especifica la ruta de origen del contenedor.
  • DEST_PATH es la ruta de destino en el host.
  • CONTAINER: DEST_PATH es la ruta de destino en el contenedor.

Además, también puede agregar las options con los siguientes parámetros en el comando de la siguiente manera:

  • Usar archivo o un:copia todos los permisos de usuario y grupo principal de los archivos y carpetas.
  • Uso de L:especificar la opción L permitirá que cualquier enlace simbólico en la ruta de origen se copie en la ruta de destino.
# Syntax to Copy from Container to Docker Host  
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# Syntax to Copy from Docker Host to Container  
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5. A continuación, ejecute docker cp dominio. El docker cp el comando copiará el myfile.txt que creó anteriormente a los contenedores /usr/share directorio. ccae4670f030 es el ID del contenedor al que pertenece myfile.txt será copiado.

sudo docker cp myfile.txt ccae4670f030:/usr/share

6. Finalmente, SSH en el contenedor en ejecución ejecutando docker exec comando con /bin/bash , que se utiliza como shell predeterminado para el inicio de sesión de usuario del sistema Linux.

  • La i indicador que indica que le gustaría abrir una sesión SSH interactiva en el contenedor. El i bandera no cierra la sesión SSH incluso si el contenedor no está adjunto.
  • El t flag asigna un pseudo-TTY que se puede utilizar para ejecutar comandos de forma interactiva.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

Verá a continuación que ahora está conectado al shell del contenedor cuando ejecuta docker exec .

7. Después de iniciar sesión en el contenedor, verifique si myfile.txt se ha copiado en el contenedor con el comando ls.

  • ls es un comando para listar archivos de computadora en sistemas operativos Unix y similares a Unix.
  • grep buscará todos los archivos o carpetas, comenzando con la cadena my dentro del usr/share directorio.

Copiando archivos usando DockerFile

En la sección anterior, aprendió a copiar los archivos en el contenedor ejecutando el comando cp de Docker. ¿Qué sucede si necesita copiar varios archivos de una sola vez? ¡Ciertamente, ejecutar múltiples comandos se convierte en una sobrecarga! Para resolver la ejecución de varios comandos cp, ¿por qué no intentar copiar archivos o carpetas en contenedores usando Dockerfile con COPY? comandos?

La implementación de un contenedor y la copia de archivos o carpetas con Dockerfile le permite eliminar los pasos de copia manual que realizó en la sección anterior. Un Dockerfile es un documento de texto que contiene todos los comandos que un usuario podría llamar en la línea de comandos para ensamblar una imagen.

Vamos a crear un Dockerfile, ejecutar un contenedor desde él y finalmente copiar los archivos.

1. Cree una carpeta llamada ~/host-to-container-copy-demo, luego cambie (cd ) el directorio de trabajo a esa carpeta. Esta carpeta contendrá todos los archivos que creará en esta demostración.

mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo

2. Ahora, cree dos archivos de texto llamados myfile1.tx t y miarchivo2.txt , cópielos y péguelos en los archivos y guárdelos en ~/host-to-container-copy-demo directorio.

# myfile1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# myfile2.txt
Hello This is my second file !
This is file will be copied in /tmp directory from Docker host to Docker Container.

3. Cree otro archivo, copie/pegue la siguiente configuración y guarde el archivo como Dockerfile dentro de ~/host-to-container-copy-demo directorio. Cuando esté completo, Docker usará este DockerFile para ejecutar todos los comandos necesarios para crear una nueva imagen de Docker encima de cualquier imagen base.

El DockerFile a continuación contiene varios pasos/instrucciones que construirán el nuevo contenedor:

  • FROM La instrucción FROM inicializa una nueva etapa de construcción y establece la imagen base para instrucciones posteriores.
  • COPY El comando COPY copia un archivo de la máquina host (host Docker) al contenedor.
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)
# Using the base image ubuntu: latest
FROM ubuntu:latest
# Copying myfile1.txt to the containers /usr/share directory
COPY myfile1.txt /usr/share
# Copying myfile2.txt to the containers /tmp directory
COPY myfile2.txt /tmp

4. Verifique todos los archivos requeridos para construir la nueva imagen ejecutando el tree dominio. Debería ver Dockerfile, myfile1.txt y myfile2.txt en ~/host-to-container-copy-demo directorio.

5. A continuación, cree la imagen ejecutando docker build dominio. El t la bandera se usa para etiquetar la imagen updated_ubuntu_image con el latest y . permite a la ventana acoplable seleccionar todos los archivos necesarios del directorio de trabajo actual.

sudo docker build -t updated_ubuntu_image:latest .

6. Ahora, verifique la imagen recién creada updated_ubuntu_image ejecutando las docker images dominio. Tenga en cuenta el REPOSITORIO atributo. Este atributo es la etiqueta creada con -t bandera en el paso anterior.

sudo docker images

7. Finalmente, ejecute el contenedor docker usando la imagen recién construida ejecutando docker run dominio. El -it flag indica a Docker que asigne una pseudo-terminal conectada a la entrada estándar del contenedor. bash proporciona el shell predeterminado para el inicio de sesión de usuario del sistema Linux.

sudo docker run -it updated_ubuntu_image bash

Verá a continuación que ahora se encuentra en el shell Bash del contenedor Docker.

8. A continuación, verifique si los archivos se copiaron correctamente en el contenedor en los directorios /tmp y /usr/share ejecutando el ls dominio.

Montar un volumen de almacenamiento y acceder a archivos con el Docker Volume Comando

Hasta ahora, ha aprendido a copiar archivos del host al contenedor usando dos enfoques diferentes utilizando docker cp comando y un DockerFile . Esta vez, aprendamos cómo compartir fácilmente sistemas de archivos entre el host y los contenedores usando el docker volume comando.

Suponiendo que todavía está conectado a la terminal:

1. Cree un volumen en el host de Docker ejecutando docker volume create dominio. El siguiente comando creará un volumen llamado my-vol . sudo docker volume create my-vol

sudo docker volume create my-vol

2. Verifique que el volumen se haya creado correctamente ejecutando docker volume ls dominio. El comando docker volume ls enumera el volumen. Después de ejecutar docker volume ls comando, verá my-vol en el atributo NOMBRE DEL VOLUMEN que confirma que el volumen se creó correctamente.

sudo docker volume ls

3. A continuación, ejecute el contenedor con docker run comando.

  • El contenedor llamado volume_testing usa el nginx: latest imagen.
  • d flag ejecuta el contenedor en segundo plano y lo mantiene vivo hasta que se elimine.
  • v flag monta el volumen my-vol creado en el host de Docker al destino del contenedor /app directorio.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest

4. Verifique si el volumen my-vol que creó anteriormente está montado correctamente con el contenedor usando docker inspect dominio. El comando de inspección Docker proporciona la información del contenedor. Después de ejecutar docker inspect comando, mostrará todos los detalles del contenedor especificado (volume_testing ) detalles, incluidos los detalles del montaje, como se muestra a continuación.

sudo docker inspect volume_testing

A continuación, la instantánea de la imagen confirma que el volumen (my-vol ) que creó en el host se montó correctamente con el /app del contenedor directorio.

Conclusión

En este tutorial, aprendió diferentes formas de copiar archivos o carpetas del host de Docker a contenedores, como usar el comando cp de Docker, los comandos de volumen de Docker y Dockerfile.

Entonces, ¿qué enfoque utilizará a continuación al copiar datos del host a los contenedores de Docker?


Docker
  1. Cómo instalar Jenkins con Docker

  2. Cómo ejecutar MySQL en un contenedor Docker

  3. Cómo usar SSH en un contenedor Docker

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

  5. Cómo instalar Nextcloud con Docker en su servidor Linux

Cómo indexar las dependencias de su imagen Docker con Syft

Cómo ejecutar Grafana en un contenedor Docker

Mejore su juego DevOps con estos ejemplos de ejecución de Docker

Cómo crear una imagen de ventana de Docker con la etiqueta de compilación de Docker

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

Cómo acceder a archivos fuera de un contenedor Docker