Перейти к содержанию

Использование СУБД для контейнеров Docker

Здесь приводятся краткие инструкции по развертыванию СУБД MySQL и PostgreSQL, а также описание процедур резервного копирования и восстановления баз данных из этих СУБД.

MySQL

Пример развертывания СУБД:

  • запустим СУБД MySQL
docker run --name my-mysql -d\
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=mydb \
-v my-db-volume:/var/lib/mysql \
mysql

Нюанс

Имя БД и пароль администратора, задаваемые в переменных, необходимы только при первом запуске и создании БД. Если контейнер будет удаляться и создаваться заново, нет необходимости указывать эти переменные - их значения будут храниться в БД.

  • запустим контейнер phpMyAdmin
docker run --name my-phpmyadmin -d \
-p 8080:80 \
-e PMA_HOST=my-mysql \
phpmyadmin

Теперь можно при помощи браузера перейти по ссылке: http://localhost:8080.

А можно при помощи Docker Engine работать с базой данных:

docker exec my-mysql \
mysql -u root -pmy-secret-pw \
-e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); \
INSERT INTO mydb.mytable (column_name) VALUES ('value');"

Резервное копирование базы данных MySQL

Можно выполнить резервное копирование выбранной базы данных:

docker exec my-mysql mysqldump -uroot -pmy-secret-pw mydb > mysql-mydb-backup.sql

Также можно выполнить резервное копирование всех баз данных в один файл:

docker exec my-mysql mysqldump -uroot -pmy-secret-pw --all-databases > mysql-all-databases-backup.sql

Восстановление базы данных MySQL

Прежде чем восстановить базу данных из файла, необходимо создать на сервере MySQL пустую одноименную базу:

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE DATABASE mydb;"

После этого можно выполнить восстановление всех таблиц базы данных:

cat mysql-mydb-backup.sql | docker exec my-mysql mysql -uroot -pmy-secret-pw mydb

PostgreSQL

Пример развертывания СУБД:

  • запустим СУБД:
docker run -d --name my-postgres \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=my-secret-pw \
-v my-postgres-volume:/data/db \
-p 5432:5432 \
postgres
  • запустим pgAdmin:
docker run -d --name my-pgadmin \
-e PGADMIN_DEFAULT_EMAIL=admin@domain.local \
-e PGADMIN_DEFAULT_PASSWORD=my-secret-pw \
-p 8090:80 \
dpage/pgadmin4

Теперь можно при помощи браузера перейти по ссылке: http://localhost:8090.

Резервное копирование базы данных PostgreSQL

Выполнить резервное копирование всех баз данных:

docker exec -t my-postgres pg_dumpall -c -U admin > postgres-dump-all.sql

Резервное копирование указанной базы данных:

docker exec -t my-postgres pg_dump mydb -c -U admin > postgres-dump-mydb.sql

Восстановление базы данных PostgreSQL

Перед восстановлением базы данных нужно создать одноименную пустую базу:

docker exec -t my-postgres createdb -U admin mydb2

После этого можно выполнить восстановление:

cat dump-mydb.sql | docker exec -i my-postgres psql -U admin -d mydb