Site icon 8HOST.COM

Обмен данными между контейнером Docker и хостом

Как правило, контейнеры Docker работают до тех пор, пока не выполнится команда внутри контейнера. После этого контейнер останавливает свою работу. По умолчанию все данные, созданные внутри контейнера, доступны только внутри контейнера и только пока он запущен.

Для обмена данными между контейнером и хост-системой можно использовать тома Docker. Для примера можно использовать официальный образ Nginx. Попробуйте настроить постоянное копирование данных из логов Nginx на хост для дальнейшего анализа. По умолчанию логи Nginx находятся в /var/log/nginx внутри контейнера Nginx. Обычно хост не имеет доступа к таким данным.

Данное руководство поможет вам получить доступ к данным внутри контейнера с хост-машины.

Требования

Читайте также:

Экосистема Docker: базовые компоненты

Экосистема Docker: основы контейнеризации

Примечание: Руководство предназначено для Ubuntu 16.04, однако с небольшими правками оно подойдёт и для других дистрибутивов.

1: Монтирование тома

Следующая команда создаст каталог nginxlogs в домашнем каталоге пользователя на локальном хосте и смонтирует его в /var/log/nginx в контейнере.

docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

Рассмотрим команду подробнее:

Примечание: Флаг –v очень гибкий. Он также используется для выбора имени тома. Если первый аргумент начинается с / или ~/, флаг выполнит монтирование. В противном случае он присвоит тому имя.

-v /path:/path/in/container смонтирует каталоги /path и /path/in/container. -v path:/path/in/container создаст том по имени path, не имеющий никакого отношения к хосту.

2: Доступ к данным

Теперь на хосте есть запущенный контейнер Nginx, а порт 5000 хост-машины связан с портом 80 контейнера.

Загрузите адрес в браузере:

http:// IP_адрес_или_имя_хоста:5000

На экране появится:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. […]

Теперь проверьте ~/nginxlogs. В нём вы найдёте access.log, созданный контейнером nginx:

cat ~/nginxlogs/access.log
203.0.113.0 - - [11/Nov/2016:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-"
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

Если вы внесёте изменения в каталог ~/nginxlogs, вы сможете увидеть их в контейнере Docker.

Заключение

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