opened image

Как скопировать данные с хоста в Docker и из Docker на хост

Как мы увидели из предыдущих статей, Docker может упростить развертывание разных приложений, и их запуск.

Но иногда нужно отправить файлы из хостовой машины в Docker контейнер, и с контейнера на хост.

В этой статье мы сможем увидеть как это сделать.

 


Ниже приведенные команды, подразумевают что Docker у Вас уже установлен. Если нет, то узнать как это сделать, Вы можете в статьях: "Как установить Docker на Centos 7" или "Как установить Docker на Ubuntu 20.04".
 

Копирование файлов из хост-системы в Docker-контейнер.


Для копирования в Docker и из него, будем использовать утилитой docker cp.

Утилита docker cp копирует содержимое источника в место назначения.

Вы можете копировать из файловой системы контейнера на локальный компьютер или наоборот, из локальной файловой системы в контейнер.


Пример: Локальный хост -> Контейнер

docker cp <путь к файлу на хост машине> containerid:<путь к файлу в контейнере>


Пример: Контейнер -> Локальный хост

 

docker cp containerid:<путь к файлу на хост машине> <путь к файлу на хост машине>



Давайте посмотрим на это в действии на простом примере образа докера Nginx.

Можем воспользоваться следующей командой:

 

 

docker run -d --name nginx_copy nginx

 


где: 
nginx_copy - имя контейнера (можно использовать любое)
nginx - имя образа на docker hub которое мы будем использовать


Если данного контейнера у Вас нет на сервере, дожидаемся пока он закачается. 


 

Теперь зайдем в контейнер что бы посмотреть/узнать где или какой файл скопировать.

 

 

docker exec -it nginx_copy /bin/bash

 


Теперь выведем в терминал содержимое папки  /etc/nginx

 

 

ls -la  /etc/nginx/

 


К примеру нам нужно скопировать конфигурационный файл nginx.conf и нам известно что он находиться по пути /etc/nginx/nginx.conf. Для этого вводим следующую команду:

 

 

docker cp nginx_copy:/etc/nginx/nginx.conf ~/nginx.conf

 


Где:

nginx_copy - контейнер с которого копируем;
/etc/nginx/nginx.conf - путь к файлу который нужно скопировать;
~/nginx.conf - место назначения и имя файла (имя файла можно задать другое)

Теперь посмотрим на результат:

 

 

 

ls -la

 



Как видим файл успешно скопировался на хост. Теперь можем его изменить, потом загрузить обратно.

 

 

Как скопировать файл в контейнер.


Допустим нам нужно теперь изменённый файл nginx.conf скопировать обратно в контейнер. Для этого можем воспользоваться данной конструкцией:

 

 

 

 

docker cp ~/nginx.conf nginx_copy:/etc/nginx/nginx.conf_cp

 


Если все введено верно, мы сможем данный файл наблюдать в контейнере.

Зайдем в контейнер:

 

 

docker exec -it nginx_copy /bin/bash

 


И выведем список директории /etc/nginx:

 

 

ls -la

 



 

Как мы можем наблюдать новый файл скопирован во внутрь контейнера. 

По такому же принципу, можно переносить данные из контейнера на хост и наоборот. 

 

Также предлагаем рассмотреть другие полезные статьи: