ВОЙТИ

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

    Как мы увидели из предыдущих статей, 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
    


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

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