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 contenedor80
al host en el puerto80
.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. Eli
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 cadenamy
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 elnginx: latest
imagen. d
flag ejecuta el contenedor en segundo plano y lo mantiene vivo hasta que se elimine.v
flag monta el volumenmy-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?