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

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

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

Ниже приведенные команды, подразумевают что 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


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

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