Як ми бачили з попередніх статей, 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
Як ми можемо спостерігати, новий файл скопійований всередину контейнера.
За таким же принципом можна переносити дані з контейнера на хост і навпаки.
Також пропонуємо розглянути інші корисні статті: