opened image

Як скопіювати дані з хоста в Docker і з Docker на хост

Як ми бачили з попередніх статей, 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

 



 

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

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

Також пропонуємо розглянути інші корисні статті: