JavaRush /Курсы /Модуль 2: Fullstack /Монтирование томов

Монтирование томов

Модуль 2: Fullstack
12 уровень , 7 лекция
Открыта

8.1 Знакомство с виртуальными дисками

Монтирование томов (Volumes) — это одна из самых полезных возможностей Docker. С её помощью контейнеры могут легко работать с данными хост-машины. Эта функция делает управление данными гибким и удобным: вы можете сохранять информацию надолго, делиться ею между контейнерами и без проблем делать резервное копирование или восстанавливать данные, если что-то пойдёт не так.

Тома (Volumes) в Docker — это способ сохранять данные так, чтобы они не зависели от контейнеров. Даже если контейнер будет удалён, информация, хранящаяся в томах, останется в безопасности. Тома можно подключать (монтировать) к контейнерам, что позволяет хранить данные отдельно и использовать их повторно, независимо от того, сколько раз вы создаёте или удаляете контейнеры.

Основные типы томов

  1. Анонимные тома (Anonymous Volumes)
    • Автоматически создаются Docker, если для контейнера явно не указан том.
    • Используются для временного хранения данных.
  2. Именованные тома (Named Volumes)
    • Создаются и управляются Docker.
    • Могут быть подключены к нескольким контейнерам и сохраняются даже после их удаления или остановки.
  3. Тома с привязкой (Bind Mounts)
    • Связывают директорию на хостовой машине с директорией в контейнере.
    • Идеальны для доступа к данным хостовой системы и удобны при разработке.

Основной синтаксис команды docker run для монтирования томов


-v <host_path>:<container_path>

Полный синтаксис:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

Основные параметры для монтирования томов

1. Параметр -v или --volume

Используется для создания именованного тома или тома с привязкой.

Пример:

Terminal

docker run -d -v /host/data:/container/data nginx

2. Параметр --mount

Предоставляет более гибкий и детализированный способ монтирования томов, поддерживая дополнительные параметры.

Пример:

Terminal

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 Создание и использование томов

1. Именованные тома

Именованные тома создаются и управляются Docker. Они предназначены для долговременного хранения данных, которые должны сохраняться между перезапусками или удалениями контейнеров.

Создание именованного тома:

Terminal

docker volume create my_volume

Запуск контейнера с монтированием тома:

В этом примере том my_volume монтируется в директорию /data внутри контейнера my_container. Все данные, записанные в /data, сохранятся в томе и останутся доступными даже после удаления контейнера.

Terminal

docker run -d -v my_volume:/data --name my_container nginx

2. Анонимные тома

Анонимные тома создаются Docker автоматически и связываются с конкретным контейнером. Они полезны для временных данных, которые не требуется сохранять после удаления контейнера.

Запуск контейнера с анонимным томом:

В этом примере Docker автоматически создаст анонимный том и смонтирует его в директорию /data внутри контейнера.

Terminal

docker run -d -v /data --name my_container nginx

3. Привязанные директории

Привязанные директории позволяют монтировать директории хостовой системы в контейнеры. Это удобно для совместного использования данных между контейнерами и хост-системой. Также такой подход часто используется в процессе разработки, когда исходный код хранится на хостовой системе.

Запуск контейнера с привязанной директорией:

В этом примере директория /host/data на хостовой машине монтируется в директорию /container/data внутри контейнера my_container.

Terminal

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 Примеры использования томов

1. Сохранение данных базы данных

Использование томов для баз данных помогает сохранить данные даже при перезапусках и обновлениях контейнера. Это особенно важно для надежной работы в производственных средах.

Пример:

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

Terminal

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. Совместное использование данных контейнерами

Иногда бывает необходимо шарить данные несколькими контейнерами. Тома позволяют легко это сделать.

Пример

Создадим том и запустим два контейнера, которые будут использовать этот том. Оба контейнера получат доступ к данным в томе shared_data, что позволяет им обмениваться данными.

Terminal

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. Разработка и тестирование

При разработке приложений удобно использовать привязанные директории для совместного использования исходного кода между контейнером и хостовой машиной. Это позволяет разработчикам редактировать код на хосте, а контейнеру — сразу работать с обновлениями.

Пример

В этом примере директория /path/to/source на хостовой машине монтируется в директорию /app внутри контейнера dev_container. Таким образом, контейнер может использовать актуальный исходный код прямо с хостовой системы.

Terminal

docker run -d -v /path/to/source:/app --name dev_container node

8.4 Управление томами

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

1. Просмотр всех томов

Эта команда выводит список всех доступных томов на хостовой машине.

Terminal

docker volume ls

2. Просмотр информации о томе

С помощью этой команды можно получить подробные сведения о томе my_volume: его местоположении на хостовой файловой системе, а также информации о контейнерах, которые используют этот том.

Terminal

docker volume inspect my_volume

3. Удаление тома

Эта команда удаляет том my_volume. Перед удалением важно убедиться, что том не используется ни одним контейнером, иначе команда не выполнится.

Terminal

docker volume rm my_volume

8.5 Резервное копирование томов

Для обеспечения безопасности данных важно иметь возможность создавать резервные копии томов и восстанавливать их при необходимости.

1. Резервное копирование тома

В этом примере содержимое тома my_volume архивируется в файл my_volume_backup.tar.gz, который сохраняется в директории /backup на хостовой машине.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. Восстановление тома

Этот пример восстанавливает содержимое тома my_volume из резервной копии, которая хранится в файле my_volume_backup.tar.gz.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
3
Задача
Модуль 2: Fullstack, 12 уровень, 7 лекция
Недоступна
Создание именованного тома и монтирование в контейнер
Создание именованного тома и монтирование в контейнер
3
Задача
Модуль 2: Fullstack, 12 уровень, 7 лекция
Недоступна
Монтирование привязанной директории
Монтирование привязанной директории
3
Задача
Модуль 2: Fullstack, 12 уровень, 7 лекция
Недоступна
Совместное использование тома между контейнерами
Совместное использование тома между контейнерами
3
Задача
Модуль 2: Fullstack, 12 уровень, 7 лекция
Недоступна
Резервное копирование и восстановление тома
Резервное копирование и восстановление тома
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ