doc_memo/docker/docker-mariadb.md

3.2 KiB
Raw Permalink Blame History

Развертывание MariaDB (MySQL) в контейнере Docker

Создаем и запускаем контейнер с MariaDB. Т.к. при перезапуске контейнера данные из базы уничтожаются, то пробросим из нее том с данными наружу во внешний каталог (том), в данном случае /home/[user]/docker-data/maria-db/ :

sudo docker run --name MariaDB_11.1.2 --restart=always \
    -e MYSQL_ROOT_PASSWORD=qwaseR12 \
    -e TZ=Europe/Moscow \
    -p 127.0.0.1:3306:3306 \
    -v /home/[user]/docker-data/maria-db/:/var/lib/mysql \
    -v /etc/timezone:/etc/timezone:ro \
    -v /etc/localtime:/etc/localtime:ro \
    -d mariadb:11.1.2

Для docker-compose это будет вот такой docker-compose.ym:

version: "3.1"
services:
  mariadb:
    container_name: MariaDB_11.1.2
    image: mariadb:11.1.2
    volumes:
      - /home/[user]/docker-data/maria-db:/var/lib/mysql
      # ↓↓↓ это устанавливает часовой пояс как в системе, но сработает только под Linux: 
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MARIADB_ROOT_PASSWORD=***
      # - MARIADB_AUTO_UPGRADE=yes
      #  ↓↓↓ это устанавливает часовой пояс принудительно, и сработает и под MacOS, и под Windows 
      - TZ=Europe/Moscow
      #  ↓↓↓ всякие оптимизационные параметры устанавливаем вот так:
      - sql-mode=""
      - ft_min_word_len=1
      - wait_timeout=600
      - max_allowed_packet=1G
      - innodb_buffer_pool_size=100M
      - net_read_timeout=3600
      - net_write_timeout=3600
    ports:
      - 127.0.0.1:3306:3306
    command:
      --bind-address=0.0.0.0
      --skip_ssl=true
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
    restart: always

Далее надо создать суперпользователя в базе данных. Для этого надо зайти в CLI (командную строку) нашего контейнера, выполнив команду (в Docker Desktop под Windows или MacOS -- просто выбираем контейнер в списке и нажимаем кнопку CLI или в новых версиях вкладка exec):

docker exec -it MariaDB_11.1.2 bash

После этого внутри контейнера войти в MariaDB:

mariadb -u root -p

Спросит пароль -- просто жмем Enter. Создаём супер-пользователя (например: superdb_user) командами:

CREATE USER 'superdb_user'@'%' IDENTIFIED BY 'secret-password';
GRANT ALL PRIVILEGES ON *.* TO 'superdb_user'@'%';
FLUSH PRIVILEGES;
exit;

После этого можно выйти из контейнера:

exit

Теперь можно коннектится к базе внутри контейнера точно так же как к базе установленным обычным образом.