Подключение тома для сохранения данных
На этом шаге вы узнаете, как использовать тома Docker для сохранения данных, генерируемых и используемых контейнерами. По умолчанию данные внутри контейнера являются временными — они теряются при удалении контейнера. Тома позволяют хранить данные вне файловой системы контейнера, сохраняя их даже после остановки или удаления контейнера.
Сначала остановим и удалим контейнер my-nginx из предыдущего шага:
docker stop my-nginx
docker rm my-nginx
Теперь создадим том Docker. Тома управляются Docker и хранятся в выделенной области на хосте:
docker volume create my-volume
Вы должны увидеть имя тома (my-volume), подтверждающее его создание.
Список существующих томов можно просмотреть командой:
docker volume ls
В списке должен отображаться том my-volume.
Теперь запустим новый контейнер nginx и подключим том my-volume к стандартной веб-директории Nginx (/usr/share/nginx/html). Это означает, что любые файлы в этой директории контейнера будут фактически храниться в томе my-volume на хосте.
Запустим контейнер в фоновом режиме (-d), опубликуем порт 80 контейнера на порт 8081 хоста (-p 8081:80), присвоим имя (my-nginx-volume) и используем флаг -v для подключения тома. Формат подключения именованного тома: имя_тома:путь_в_контейнере.
docker run -d --name my-nginx-volume -p 8081:80 -v my-volume:/usr/share/nginx/html nginx
Вы должны увидеть ID контейнера, подтверждающий его запуск.
Теперь создадим простой HTML-файл в подключенном томе, выполнив команду внутри контейнера:
docker exec my-nginx-volume sh -c 'echo "<h1>Hello from the volume!</h1>" > /usr/share/nginx/html/index.html'
Эта команда создает файл index.html с содержимым <h1>Hello from the volume!</h1>.
Проверим доступность веб-сервера на порту 8081:
curl http://localhost:8081
В выводе должно отображаться <h1>Hello from the volume!</h1>, что подтверждает работу с файлом в подключенном томе.
Для демонстрации сохранности данных остановим и удалим контейнер:
docker stop my-nginx-volume
docker rm my-nginx-volume
Теперь запустим новый контейнер с тем же томом, назвав его my-nginx-volume-new и опубликовав порт 80 на порт 8082 хоста:
docker run -d --name my-nginx-volume-new -p 8082:80 -v my-volume:/usr/share/nginx/html nginx
Проверим доступность сервера на порту 8082:
curl http://localhost:8082
Вы по-прежнему должны видеть <h1>Hello from the volume!</h1>, так как файл сохранился в томе my-volume независимо от контейнера.
Это демонстрирует преимущество томов для сохранения данных независимо от жизненного цикла контейнеров.