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

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

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

Вариант 1. Хранение данных MySQL на томах Docker

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

Вы можете легко создать том Docker на своем хост-компьютере и подключить его к контейнерам Docker.

docker-compose.yml:

version: ‘3’
services:
  db:
    image: mysql:5.7
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: my_secret_password
      MYSQL_DATABASE: app_db
      MYSQL_USER: db_user
      MYSQL_PASSWORD: db_user_pass
    ports:
       «6033:3306»
    volumes:
       dbdata:/var/lib/mysql
volumes:
  dbdata:
Приведенная выше конфигурация определяет один том данных с именем «dbdata», который подключен к контейнеру MySQL и смонтирован в каталоге /var/lib/mysql.

Это каталог по умолчанию, используемый MySQL для хранения всех файлов данных.

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

docker-compose up -d

Вывод:

Creating network "db_default" with the default driver
Creating volume "db_dbdata" with default driver
Creating db ... done

Вы можете просмотреть тома Docker, выполнив команду:

docker volume ls

Вариант 2 — Хранение данных MySQL на хост-машине

Мы рекомендуем использовать том docker вместо размещения файлов на хост-машине.

Но, если хотите, вы можете хранить файлы базы данных и на хост-машине.

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

Создайте каталог для хранения ваших файлов данных MySQL.

Я создаю структуру каталогов:

mkdir -p ./data/db
Затем настройте docker-compose.yml для использования ./data/db в качестве тома для хранения всех файлов, созданных сервером MySQL.
Затем создайте compose файл в текущем каталоге.

docker-compose.yml:

version: '3'


services:

db:

image: mysql:5.7

container_name: db

environment:

MYSQL_ROOT_PASSWORD: my_secret_password

MYSQL_DATABASE: app_db

MYSQL_USER: db_user

MYSQL_PASSWORD: db_user_pass

ports:

- "6033:3306"

volumes:

- ./data/db:/var/lib/mysql

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

docker-compose up -d

Вывод:

Creating network "db_default" with the default driver
Creating db ... done
В этом случае контейнер MySQL создает все файлы на хост-компьютере в каталоге ./data/db.
Чтобы просмотреть эти файлы, просто запустите команду, показанную ниже.
ls -l ./data/db

drwxr-x--- 2 systemd-coredump systemd-coredump     4096 Jul  1 11:07 app_db
-rw-r----- 1 systemd-coredump systemd-coredump       56 Jul  1 11:07 auto.cnf
-rw------- 1 systemd-coredump systemd-coredump     1676 Jul  1 11:07 ca-key.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump     1112 Jul  1 11:07 ca.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump     1112 Jul  1 11:07 client-cert.pem
-rw------- 1 systemd-coredump systemd-coredump     1680 Jul  1 11:07 client-key.pem
-rw-r----- 1 systemd-coredump systemd-coredump     1346 Jul  1 11:07 ib_buffer_pool
-rw-r----- 1 systemd-coredump systemd-coredump 50331648 Jul  1 11:07 ib_logfile0
-rw-r----- 1 systemd-coredump systemd-coredump 50331648 Jul  1 11:07 ib_logfile1
-rw-r----- 1 systemd-coredump systemd-coredump 79691776 Jul  1 11:07 ibdata1
-rw-r----- 1 systemd-coredump systemd-coredump 12582912 Jul  1 11:07 ibtmp1
drwxr-x--- 2 systemd-coredump systemd-coredump     4096 Jul  1 11:07 mysql
drwxr-x--- 2 systemd-coredump systemd-coredump     4096 Jul  1 11:07 performance_schema
-rw------- 1 systemd-coredump systemd-coredump     1680 Jul  1 11:07 private_key.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump      452 Jul  1 11:07 public_key.pem
-rw-r--r-- 1 systemd-coredump systemd-coredump     1112 Jul  1 11:07 server-cert.pem
-rw------- 1 systemd-coredump systemd-coredump     1680 Jul  1 11:07 server-key.pem
drwxr-x--- 2 systemd-coredump systemd-coredump    12288 Jul  1 11:07 sys

 

Поделитесь статьей:

Добавить комментарий