Если не знаете что такое Docker Volume то рекомендую сперва почитать про это тут.
Многие переходят на контейнеризацию из-за быстрого и лёгкого способа обновления. Например если необходимо перейти с одной версии баз данных на другую. При использовании обычного подхода с хостовой ОС это требует больше манипуляций чем при использовании контейнеризации. Например, нужно добавить или активировать репозиторий, далее возможно обновить какие-то компоненты самой ОС и т.д.
Создание контейнера с PostgreSQL
Так как сейчас очень распространён PostgreSQL я буду использовать именно его для примера. Но важное замечание никогда не обновляйте контейнер с базой данных, не прочитав рекомендации и требования на официальном сайте. Например, чтобы перейти с версии 17 на 18 необходимо выполнить pg_upgrade.
- Для начала создам Docker Volume
docker volume create pg_volume - Вторым этапом я создам контейнер с образа
postgres:17docker container run -d -v pg_volume:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword --name some-postgres postgres:17
Сохранение информации
- Создаю новую БД
docker exec -it some-postgres psql -U 'postgres' -w -h localhost -c 'CREATE DATABASE TEST;' - Создаю таблицу
docker exec -it some-postgres psql -U 'postgres' -w -h localhost -d test -c 'CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, age INT);` - Вставляю данные
docker exec -it some-postgres psql -U 'postgres' -w -h localhost -d test -c "INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25);" - Проверяю всё
docker exec -it some-postgres psql -U 'postgres' -w -h localhost -d test -c "SELECT * FROM users;"
Удаление контейнера
Теперь я удаляю существующий контейнер и проверяю что Docker Volume остался.
docker container rm -f some-postgres
docker volume ls
Создание нового контейнера
Теперь я создаю новый контейнер с версией выше (17.6) используя существующий Docker Volume и проверяю что данные те же, что я записал ранее.
docker container run -d -v pg_volume:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword --name some-postgres2 postgres:17.6
docker exec -it some-postgres2 psql -U 'postgres' -w -h localhost -d test -c "SELECT * FROM users;"
id | name | age
----+-------+-----
1 | Alice | 30
2 | Bob | 25
(2 rows)


Комментарии