Введение
Docker Data Volumes — важная концепция при контейнеризации ваших приложений. Понимание этой концепции жизненно важно для обеспечения наилучшей работы вашего контейнеризированного приложения, а также для надежного хранения и управления данными. Однако, несмотря на важность этой концепции, она также является запутанной и сложной для многих разработчиков. Разработчикам и DevOps-специалистам важно понимать, как настраивать Docker Data Volumes, понимать их правильное использование, знать различные типы томов и то, какой тип выбрать для своего приложения.
Это руководство посвящено объяснению концепции и использования Docker Data Volumes. После завершения этого руководства вы освоите настройку и работу с любым типом Docker Data Volume.
Предварительные требования
Для прохождения этого руководства вам понадобятся следующие элементы:
- Ubuntu установлена. Ознакомьтесь с нашим Как настроить сервер Ubuntu 18.04 руководством для быстрой справки.
- Пользователь Ubuntu с привилегиями sudo. Этот шаг может быть сложным, особенно если вы не знакомы с Linux. Прочитайте Настройка файла Linux Sudoers для получения подробного руководства.
- Docker установлен на Ubuntu. Чтобы установить Docker на вашу Ubuntu, вы можете перейти в наш блог Как установить & управлять Docker на Ubuntu в публичном облаке .
Хотя это руководство ориентировано на управление Docker на Ubuntu, docker команды применимы во всех операционных системах с установленным Docker.
Понимание того, как работают контейнеры Docker
Чтобы полностью понять Docker Data Volumes, необходимо знать, как работают контейнеры Docker. В этом разделе мы приводим обзор основ для новых пользователей Docker. Если вы знаете, как работает Docker, или являетесь опытным пользователем Docker, вы можете пропустить этот раздел и сразу перейти к томам данных.
Контейнеры Docker позволяют запускать приложение поверх хостовой операционной системы путем установки платформы Docker. Поскольку платформа Docker установлена на хостовой операционной системе, между хост-машиной и гостевым приложением создается абстракция. В отличие от виртуальной машины, контейнер Docker делит свое ядро Linux с хостовой операционной системой. Поскольку Docker не требует установки какой-либо дополнительной операционной системы поверх хост-машины, приложения Docker являются легковесными и доступными на всех хост-машинах, если на них установлен Docker.
Поскольку дополнительной гостевой ОС нет, платформа Docker делит ресурсы с хост-машиной. Запуск приложения Docker происходит быстро, но сложности возникают, когда вам приходится делиться ресурсами. У Docker нет собственной памяти или хранилища для постоянного хранения данных. Эти ресурсы должны поступать с хост-машины. Люди, привыкшие к использованию виртуальных машин, находят этот процесс совместного использования и управления ресурсами сложным. Отсутствие надлежащих знаний может привести к неожиданным и нежелательным результатам. Хотя это руководство предполагает, что вы знакомы с экосистемой Docker, вы можете ознакомиться с нашим подробным руководством Что такое Docker? Обзор экосистемы Docker для быстрого освежения знаний.
Сохранение данных с использованием Docker Data Volumes
При работе с Docker вы не можете создать том непосредственно внутри него. Поэтому для хранения данных нам нужно создать контейнер тома Docker с прикрепленным к нему томом. Чтобы подключить наше приложение Docker к этому контейнеру тома данных, мы используем Docker’s --volume-from для получения контейнера и его подключения к нашему приложению.
Мы разберем этот процесс шаг за шагом:
- Сначала создайте новый контейнер с именем
my-container выполнив команду ниже:
1docker create -v /tmp --name my-container ubuntu
Это создаст новый контейнер в папке /tmp . При необходимости вы можете изменить директорию папки. - Теперь, когда ваш контейнер данных готов, вы можете производить в него запись, запустив новый контейнер Ubuntu с флагом
--volume-from и затем запустив
bash. Все, что мы записываем в
tmp каталог будет сохранен в
/tmp папке нашей хост-машины:
1docker run -t -i --volumes-from my-container ubuntu /bin/bash
Параметр командной строки -t вызывает терминал изнутри контейнера. Флаг -i делает соединение интерактивным. В командной строке bash контейнера Ubuntu создайте файл в /tmp:
1echo "Some sample data" > /tmp/sample_file - Наконец, выйдите из bash, выполнив команду
exit . Затем выполните команду ниже:
1docker run -t -i --volumes-from my-container ubuntu /bin/bash
Вы найдете свой sample_file в этом каталоге. Ограничений на количество указываемых томов нет. Вы можете добавить столько томов, сколько хотите, используя флаг --volumes-from . Вы также можете создать столько контейнеров томов данных, сколько захотите.
Доступ к данным между хостом и контейнером Docker
Для читателей, знакомых с виртуализацией, этот вариант аналогичен общей папке в виртуальных машинах. Здесь вместо создания контейнера data-only мы запускаем наше приложение Docker с использованием образа Docker и переопределяем один из его каталогов содержимым каталога на хост-системе.
Обычный сценарий — сохранение файлов логов на хост-машине. Это может понадобиться для того, чтобы мы могли анализировать эти файлы по мере необходимости, не заходя внутрь машины. Для этого сценария предположим, что вы используете Docker Nginx image и хотите хранить его файлы логов на хост-машине. Docker-образ Nginx записывает логи в каталог /var/log/nginx , но это /var/log/nginx внутри Docker-контейнера Nginx. Таким образом, это расположение недоступно для хост-машины.
Чтобы достичь нашей цели, нам нужно будет создать общую папку для хранения логов между хост-машиной и Docker-образом Nginx. Ниже мы проиллюстрируем этот процесс в простом пошаговом руководстве:
- Сначала создайте на хост-машине каталог, в котором вы хотите хранить логи:
Затем запустите контейнер, выполнив команду ниже:1mkdir ~/my-nginxlogs
1docker run -d -v ~/my-nginxlogs:/var/log/nginx -p 5000:80 -i nginx
- Эта команда
run принимает несколько аргументов, поэтому давайте разберем ее, чтобы лучше понять:
- -p 5000:80: Настройка перенаправления портов. Контейнер Nginx по умолчанию слушает порт 80 , и это сопоставляет порт контейнера Nginx 80 с портом 5000 на хост-системе.
- -d: Отключить процесс и запустить его в фоновом режиме.
- -v ~/my-nginxlogs:/var/log/nginx: Мы связываем каталог /var/log/nginx изнутри контейнера Nginx с каталогом /my-nginxlogs на хост-машине. Этот символ : разделяет путь хоста и путь контейнера. Путь хоста всегда идет первым.
Теперь, когда наш контейнер Nginx запущен, сначала проверьте, работает ли сервер Nginx на порту 5000 нашей хост-машины, открыв веб-браузер и перейдя по URL-адресу: http://localhost:5000. Как только появится приветственная страница, ваш сервер Nginx готов и создает логи в своей папке /var/log/nginx .
Если вы откроете папку /my-nginxlogs на вашей хост-машине, вы увидите здесь файлы логов из Docker-контейнера Nginx. Если вы внесете изменения в папку /my-nginxlogs на хост-машине во время работы контейнера Nginx, изменения также отразятся в папке контейнера /var/log/nginx также.
Заключение
В этом руководстве мы подробно рассмотрели тома данных Docker (Docker Data Volumes). Мы изучили создание томов для вашего приложения, совместное использование данных между хостом и контейнером Docker, типы данных и сохранение данных. Это поможет вам сохранять данные в контейнеризированных приложениях, а также управлять состоянием и конфигурацией приложения.
Для дальнейшего изучения Docker ознакомьтесь со следующими руководствами в нашем блоге:
- Как разместить репозиторий образов Docker и собирать образы Docker с помощью GitLab Self-Managed на Ubuntu 20.04
- Сборка и развертывание приложения Flask с помощью Docker на Ubuntu 20.04
- Настройка приватного реестра Docker на Ubuntu 18.04
- Как обмениваться данными между контейнером Docker и хостом
- Очистка ресурсов Docker — образов, контейнеров и томов
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.