Обмен данными между контейнерами 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 для обмена информацией между контейнером и файловой системой хоста. Это полезно в средах разработки, где необходимо иметь доступ к журналам для отладки.
Добавить комментарий