УВІЙТИ
    opened image

    Як ми бачили з попередніх статей, Docker може спростити розгортання різних додатків та їх запуск.

    Але іноді потрібно передавати файли з хост-машини в контейнер Docker та з контейнера на хост.

    У цій статті ми покажемо, як це зробити.

     

    Нижче наведені команди, передбачають, що Docker вже встановлено. Якщо ні, то дізнатися, як це зробити, ви можете в статтях: "Як встановити Docker на Centos 7" або "Як встановити Docker на Ubuntu 20.04".
     

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


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

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

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


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

    docker cp <шлях до файлу на хост-машині> containerid:<шлях до файлу в контейнері>
    


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

     

    docker cp containerid:<шлях до файлу на хост-машині> <шлях до файлу на хост-машині>
    



    Давайте подивимося на це на прикладі простого образу Docker 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
    

     



     

    Як ми можемо спостерігати, новий файл скопійований всередину контейнера.

    За таким же принципом можна переносити дані з контейнера на хост і навпаки.