Copie archivos del host al contenedor Docker
-
Use
docker cp
para copiar archivos del host al contenedor Docker -
Usar
docker volume
para copiar archivos del host al contenedor Docker
Este artículo discutirá y demostrará los métodos que podemos usar para transferir archivos desde nuestra máquina host a un contenedor en ejecución en Docker.
Use docker cp
para copiar archivos del host al contenedor Docker
El comando docker cp
es una de las formas más fáciles que podemos usar para copiar archivos y directorios desde nuestra máquina host a un contenedor Docker. Usaremos Ubuntu 20.4.5 y la última versión de Docker en ese momento, que es v 19.03.
Sintaxis:
docker cp {options} PATH_HOST CONTAINER:PATH_TO_CONTAINER
Donde:
PATH_HOST
especifica la ruta de origen donde se encuentra el archivo que queremos copiar en el host.PATH_TO_CONTAINER
es la ruta de destino donde queremos almacenar el archivo en el contenedor.
Ejemplo:
Comenzaremos creando nuestro contenedor de destino. Usaremos la imagen oficial de Nginx para este artículo, que podemos obtener a través del escritorio Docker o la terminal ejecutando el siguiente comando.
$ docker pull nginx
Producción :
Using default tag: latest
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
Usamos el siguiente comando para verificar que extrajimos con éxito la imagen del registro.
$ docker images
Producción :
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c316d5a335a5 2 weeks ago 142MB
Ahora podemos crear un contenedor. Usando el comando ejecutar, crearemos un contenedor y lo implementaremos en el modo separado para escuchar en el puerto externo 8080 y el puerto interno 80.
El siguiente comando creará un contenedor utilizando la imagen base de Nginx.
$ docker run -d -p 8080:80 nginx
Podemos comprobar que hemos creado correctamente un nuevo contenedor ejecutando el comando docker ps -a
. Esto mostrará una lista de todos los contenedores que creamos recientemente y en el pasado, junto con sus ID de contenedor y sus respectivas imágenes.
Podemos ejecutar esto como se muestra aquí.
docker ps -a
Producción :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c57de10362b nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp lucid_booth
Antes de usar el comando docker cp
, debemos crear un archivo que copiaremos desde el host al contenedor que acabamos de crear.
Crearemos un archivo llamado new_file.txt
y lo almacenaremos en el directorio de inicio usando el comando touch
.
Aquí está el comando para hacer eso.
$ touch new_file.txt
Podemos ver el directorio para asegurarnos de que hemos creado correctamente el archivo usando el comando ls
como se muestra aquí.
isaac@DESKTOP-HV44HT6:~$ ls
new_file.txt
Por supuesto, nuevo_archivo.txt
es un archivo vacío; sin embargo, queremos centrarnos en usar el comando docker cp
para moverlo del host al contenedor que creamos anteriormente.
Luego copiamos este archivo en el contenedor que creamos.
$ docker cp new_file.txt 0c57de10362b:/usr/share
Así, hemos copiado new_file.txt
en el contenedor con ID 0c57de10362b en la carpeta /usr/share
.
Podemos determinar esto ingresando al contenedor en ejecución a través de una sesión SSH interactiva usando el comando docker exec
y el indicador -it
para ejecutar comandos de forma interactiva.
$ docker exec -it 0c57de10362b /bin/bash
Ahora que hemos iniciado sesión en el contenedor, queremos enumerar los archivos para verificar que hemos copiado este archivo en este contenedor. Podemos usar el comando ls
nuevamente pero especificando la carpeta a la que queremos acceder.
root@0c57de10362b:/# ls -lh /usr/share/
Producción:
De manera similar, también podemos copiar un directorio que contenga muchos archivos simplemente cambiando la ubicación de los archivos para leer desde el directorio, como se muestra a continuación.
$ docker cp src/directory/. container-id:/target_location/directory
El comando docker cp
, aunque fácil de usar, tiene algunas limitaciones. Su sintaxis es diferente del comando cp
de Unix y solo admite un número limitado de etiquetas.
Además, esto solo se puede usar para copiar archivos del host a un contenedor y no entre contenedores.
Usar docker volume
para copiar archivos del host al contenedor Docker
Un mejor enfoque para copiar archivos entre contenedores es a través de docker volume
.
Podemos adjuntar volúmenes que contengan archivos que queramos copiar a un contenedor durante el proceso de creación del contenedor utilizando cualquiera de las dos banderas, -v
o -mount
.
Para usar volúmenes en Docker, primero creamos uno usando el comando docker volume
, como se muestra a continuación.
$ docker volume create volume_one
Usando docker volume ls
, podemos comprobar que hemos creado correctamente el volumen. Esto mostrará una lista de los nombres de los volúmenes creados ahora y en el pasado y el nombre del controlador.
isaac@DESKTOP-HV44HT6:~$ docker volume ls
DRIVER VOLUME NAME
local volume_one
Ahora que hemos creado un volumen, el siguiente paso consiste en crear un nuevo contenedor con el comando ejecutar
y adjuntar el volumen que creamos con el indicador -v
.
La bandera -v
nos permite adjuntar el nuevo volumen al contenedor que creamos. Haremos este contenedor utilizando la última versión de la imagen base de Nginx.
$ docker run -d -v volume_one:/app nginx:latest
f2457d3eb8fe14645b9e3938017c02c46a657c9ad3323ff4c03924d2fddd7046
Podemos devolver información de bajo nivel sobre los objetos de Docker usando el comando de inspección de Docker. Investigaremos si nuestro volumen se adjuntó con éxito al contenedor que creamos.
Como no le asignamos ningún nombre a este contenedor, usaremos la ID del contenedor para inspeccionarlo. Usaremos el ID de contenedor más reciente y no el anterior.
$ docker ps -a
Producción :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2457d3eb8fe nginx:latest "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 80/tcp brave_kirch
0c57de10362b nginx "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:8080->80/tcp lucid_booth
Ahora podemos usar este ID de contenedor para inspeccionar el contenedor.
$ docker inspect f2457d3eb8fe
Producción:
Una de las ventajas del comando docker volume
es crear un único directorio compartido con varios contenedores.
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedInArtículo relacionado - Docker Container
- Comprobar si el contenedor Docker se está ejecutando o no
- Ejecute contenedores de forma continua en segundo plano con Docker
- Eliminar contenedores de forma permanente en Docker
- Ingrese un contenedor Docker en ejecución con un nuevo pseudo TTY
- La diferencia entre el contenedor de Docker y la imagen de Docker
- Listar solo los contenedores detenidos en Docker