Но иногда нужно отправить файлы из хостовой машины в 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
Как мы можем наблюдать новый файл скопирован во внутрь контейнера.
По такому же принципу, можно переносить данные из контейнера на хост и наоборот.