ВОЙТИ
    opened image

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

     

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

     

     

    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
    

     


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

     

     

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


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

     

     

     

     

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

     


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

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

     

     

    docker exec -it nginx_copy /bin/bash
    

     


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

     

     

    ls -la
    

     


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

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

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