Перейти к содержимому
Главная страница » Передача данных между контейнером Docker и хостом

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

Введение

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

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

В этом уроке мы рассмотрим, как сделать данные из контейнера доступными на хост-компьютере.

Предварительные условия

Чтобы следовать этой статье, вам понадобится сервер Ubuntu 18.04 со следующим:

  • Пользователь без полномочий root с привилегиями sudo , следуя руководству по первоначальной настройке сервера с Ubuntu 18.04.
  • Docker установлен с помощью инструкций из Step 1 и Step 2 «Как установить и использовать Docker в Ubuntu 18.04».

Если вы новичок в Docker, серия Docker Ecosystem содержит подробный обзор ключевых концепций.

Note: Несмотря на то, что в разделе «Предварительные условия» приведены инструкции по установке Docker в Ubuntu 18.04, команды docker для томов данных Docker в этой статье должны работать в других операционных системах, если установлен Docker.

Шаг 1 — Привязка тома

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

  1. 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 использует : чтобы отделить путь хоста от пути контейнера, и путь хоста всегда идет первым.
  • -p 5000:80 устанавливает перенаправление порта. Контейнер Nginx по умолчанию прослушивает порт 80 . Этот флаг сопоставляет порт 80 контейнера с портом 5000 в хост-системе.
  • nginx указывает, что контейнер должен быть собран из образа Nginx, который выдает команду nginx -g "daemon off" для запуска Nginx.

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

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

Дополнительную информацию об именованных томах см. в разделе «Как обмениваться данными между контейнерами Docker».

Шаг 2 — Доступ к данным на хосте

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

Загрузите адрес в веб-браузере, используя IP-адрес или имя хоста вашего сервера и номер порта: http:// your_server_ip :5000 . Тебе следует увидеть:

Стартовая страница Nginx

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

  1. кот ~/nginxlogs/access.log

Это должно отобразить что-то вроде:

Выход
203.0.113.0 - - [11.07.2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, например) Геккон) Chrome/54.0.2840.99 Safari/537.36" "-"

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

Заключение

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *