Подключение тома для сохранения данных
На этом шаге вы узнаете, как использовать тома 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
независимо от контейнера.
Это демонстрирует преимущество томов для сохранения данных независимо от жизненного цикла контейнеров.