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

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

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

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

В этом руководстве мы рассмотрим, как сделать данные из контейнера доступными на главной машине.

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

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

--name=nginx даёт имя контейнеру, чтобы было легче ссылаться на него.

-d запускает процесс в фоновом режиме. В противном случае мы бы просто увидели пустую подсказку Nginx и не смогли бы использовать этот терминал, пока не убьем Nginx.

-v ~/nginxlogs:/var/log/nginx связывает каталог /var/log/nginx из контейнера Nginx с каталогом ~/nginxlogs на хост-машине. Docker использует a : для разделения пути хоста от пути контейнера, и путь хоста всегда стоит на первом месте.

-p 5000:80 настраивает порт форвардинг. Контейнер Nginx по умолчанию прослушивает порт 80. Этот флаг сопоставляет порт 80 контейнера с портом 5000 в хост-системе.

nginx указывает, что контейнер должен быть построен из образа Nginx, который выдает команду nginx -g «daemon off» для запуска Nginx.

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

-v /path:/path/in/container монтирует каталог хоста, /path в /path/in/container
-v path:/path/in/container создает том с именем path без связи с хостом.

Теперь у нас есть копия Nginx, работающая в контейнере Docker на нашей машине, и порт 5000 нашей хост-машины напрямую сопоставляется с этой копией порта 80 Nginx.
Загрузите адрес в веб-браузере, используя IP-адрес или имя хоста вашего сервера и номер порта: http://your_server_ip:5000. Вы увидите страницу cnfhnjde. nginx.

Что еще более интересно, если мы заглянем в каталог ~/nginxlogs на хосте, мы увидим access.log, созданный nginx контейнера, который покажет наш запрос:
# cat ~/nginxlogs/access.log

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

В этом руководстве мы продемонстрировали, как создать том данных Docker для обмена информацией между контейнером и файловой системой хоста. Это полезно в средах разработки, где необходимо иметь доступ к журналам для отладки.

Nicko

Добавить комментарий