Подключение постоянного хранилища к контейнеру

Red Hat Enterprise LinuxBeginner
Практиковаться сейчас

Введение

В рамках данного задания вы научитесь подключать постоянное хранилище к контейнеру с помощью podman. По своей природе контейнеры эфемерны, что означает потерю любых данных, созданных внутри них, после удаления контейнера. Чтобы сохранить важную информацию, можно примонтировать директорию из хост-системы в контейнер. Такая примонтированная директория называется постоянным томом (persistent volume). Она гарантирует, что ваши данные останутся в сохранности, даже если контейнер будет остановлен, удален или пересоздан.

Подключение постоянного хранилища к контейнеру

В этом задании вы создадите директорию на хост-системе, которая будет выполнять роль постоянного тома. Затем вы запустите новый контейнер, подключив к нему этот том. В завершение вы проверите, что данные, записанные в этот том изнутри контейнера, сохраняются после перезапуска контейнера.

Задачи

  • Создать директорию на хост-системе для использования в качестве постоянного тома.
  • Запустить новый контейнер, подключив к нему этот постоянный том.
  • Убедиться, что данные, записанные в том из контейнера, остаются доступными после перезапуска контейнера.

Требования

  • Создайте директорию с именем /data на хост-системе. Эта директория будет использоваться как путь на хосте для монтирования тома.
  • Запустите контейнер на основе образа nginx. Контейнер должен называться my-nginx-container.
  • Примонтируйте директорию хоста /data к директории /usr/share/nginx/html внутри контейнера.
  • Внутри запущенного контейнера создайте файл по пути /usr/share/nginx/html/my-file.txt со строгим содержанием: This is a persistent file.

Пример

После выполнения всех задач вы сможете увидеть созданный вами файл рядом со стандартными файлами Nginx внутри примонтированной директории контейнера. Вы также можете проверить директорию /data на хосте, чтобы увидеть те же самые файлы.

[labex@host ~]$ podman exec my-nginx-container cat /usr/share/nginx/html/my-file.txt
This is a persistent file
[labex@host ~]$ podman exec my-nginx-container ls /usr/share/nginx/html
my-file.txt

Подсказки

  • Используйте команду sudo mkdir для создания директории /data.
  • Вам может потребоваться изменить владельца с помощью sudo chown и права доступа с помощью sudo chmod, чтобы процесс в контейнере мог записывать данные в эту папку.
  • Флаг -v или --volume в команде podman run используется для монтирования директории хоста в контейнер. Формат записи: -v /host/path:/container/path.
  • В системах с включенным SELinux (например, RHEL) необходимо установить правильный контекст SELinux для директории хоста. Используйте команды sudo semanage fcontext -a -t container_file_t "/data(/.*)?" и sudo restorecon -R /data для настройки меток безопасности.
  • Если вы столкнулись с ошибками доступа (permission errors), попробуйте назначить владельца директории так, чтобы он соответствовал ID пользователя внутри контейнера (обычно это 1000:1000 для nginx).
✨ Проверить решение и практиковаться

Резюме

В ходе этого испытания вы научились обеспечивать постоянное хранение данных для контейнера с помощью механизма bind mount. Монтируя директорию из хост-системы в контейнер, вы гарантируете, что данные, созданные вашим приложением, сохранятся даже после остановки, удаления или перезапуска контейнера. Эта техника является фундаментальной для работы с приложениями, требующими сохранения состояния (stateful applications), в контейнерной среде.