Thank you for reading this post, don't forget to subscribe!
Docker предоставляет вам возможность сохранять файлы базы данных постоянными на томах Docker или хранить файлы непосредственно на хост-компьютере.
Используйте один из приведенных ниже вариантов, чтобы сохранить постоянную сохранность данных MySQL даже после воссоздания или удаления контейнеров Docker.
Вариант 1. Хранение данных MySQL на томах Docker
Тома Docker являются предпочтительным механизмом Docker для хранения постоянных данных контейнеров.
Вы можете легко создать том Docker на своем хост-компьютере и подключить его к контейнерам Docker.
docker-compose.yml:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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: |
[/codesyntax]
Это каталог по умолчанию, используемый MySQL для хранения всех файлов данных.
Затем выполните команду показанную ниже, чтобы запустить контейнер Docker.
1 2 |
docker-compose up -d |
Вывод:
1 2 3 4 |
Creating network "db_default" with the default driver Creating volume "db_dbdata" with default driver Creating db ... done |
Вы можете просмотреть тома Docker, выполнив команду:
1 |
docker volume ls |
Вариант 2 — Хранение данных MySQL на хост-машине
Мы рекомендуем использовать том docker вместо размещения файлов на хост-машине.
Но, если хотите, вы можете хранить файлы базы данных и на хост-машине.
В любом случае когда Docker-контейнер завершается, вы можете перезапустить контейнер, используя существующие файлы данных.
Создайте каталог для хранения ваших файлов данных MySQL.
Я создаю структуру каталогов:
1 |
mkdir -p ./data/db |
docker-compose.yml:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
[/codesyntax]
После создания файла просто запустите приведенную ниже команду, чтобы запустить контейнер.
1 |
docker-compose up -d |
Вывод:
1 2 |
Creating network "db_default" with the default driver Creating db ... done |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<strong>ls -l ./data/db</strong> 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 |