MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как да разположите MariaDB сървър в Docker контейнер

В днешно време термини като Docker, Images или Containers са доста често срещани във всички среди на бази данни, така че е нормално да видите сървър на MariaDB, работещ на Docker както в производствени, така и в непроизводствени настройки. Възможно е обаче, че макар да сте чували термините, сега може да знаете разликите между тях. В този блог ние предоставяме преглед на тези условия и как можем да ги приложим на практика за разполагане на сървър на MariaDB.

Какво е Docker?

Docker е най-разпространеният инструмент за създаване, внедряване и стартиране на приложения чрез използване на контейнери. Позволява ви да пакетирате приложение с всички необходими части (като библиотеки и други зависимости) и да го изпратите като един пакет, позволявайки преносимото споделяне на контейнери на различни машини.

Контейнер срещу виртуална машина

Какво е изображение?

Свързани ресурси ClusterControl и Docker MySQL на Docker Серия блог MySQL на Docker – Как да контейнеризирате вашата база данни

Изображението е като шаблон за виртуална машина. Той има цялата необходима информация за стартиране на контейнера. Това включва операционната система, софтуерни пакети, драйвери, конфигурационни файлове и помощни скриптове… всичко това е събрано в един пакет.

Образът на Docker може да бъде изграден от всеки, който има способността да пише скрипт. Ето защо общността създава много подобни изображения, всеки с незначителни различия... но обслужващ обща цел.

Какво е Docker контейнер?

Docker контейнерът е екземпляр на изображение на Docker. Той работи напълно изолиран от хост средата по подразбиране, като осъществява достъп само до хост файлове и портове, ако е конфигуриран да прави това.

Контейнерът може да се разглежда като виртуална машина, но вместо да създава цяла виртуална операционна система, той позволява на приложенията да използват същото Linux ядро ​​като системата, на която работят. Изисква само приложенията да се доставят с части, които все още не работят на хост компютъра. Това ви дава значително увеличение на производителността и намалява размера на приложението.

Имайте предвид, че всички промени, направени в контейнера, се записват на отделен слой, а не в същото изображение на Docker. Това означава, че ако изтриете контейнера или ако създадете нов, базиран на същото изображение на Docker, промените няма да бъдат там. За да запазите промените, трябва да го запишете в ново изображение на Docker или да създадете Docker файл.

Какво е DockerFile?

DockerFile е скрипт, използван за генериране на изображение на Docker, където имате стъпките за генерирането му въз основа на всички модификации, които искате да приложите.

Компоненти на Docker

Нека видим пример с Docker File.

$ vi Dockerfile
# MariaDB 10.3 with SSH
# Pull the mariadb latest image
FROM mariadb:latest
# List all the packages that we want to install
ENV PACKAGES openssh-server openssh-client
# Install Packages
RUN apt-get update && apt-get install -y $PACKAGES
# Allow SSH Root Login
RUN sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
# Configure root password
RUN echo "root:root123" | chpasswd

Сега можем да създадем ново изображение на Docker от този файл на Docker:

$ docker build --rm=true -t severalnines/mariadb-ssh .

Проверете създаденото ново изображение:

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
severalnines/mariadb-ssh                   latest              a8022951f195        17 seconds ago      485MB

И сега можем да използваме новото изображение като обикновено Docker изображение, както ще видим в следващия раздел.

Severalnines DevOps Ръководство за управление на бази данни Научете какво трябва да знаете, за да автоматизирате и управлявате своите бази данни с отворен код Изтеглете безплатно

Как да разположите MariaDB на Docker без Dockerfile

Сега, когато знаем повече за света на Docker, нека видим как да го използваме за създаване на сървър на MariaDB. За това ще приемем, че вече имате инсталиран Docker.

Можем да използваме изображението, създадено с помощта на Dockerfile, но ще изтеглим официалното MariaDB Docker изображение.

$ docker search mariadb
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mariadb                                MariaDB is a community-developed fork of MyS…   2804                [OK]

Без да посочва TAG, по подразбиране той ще изтегли най-новата версия на изображението, в този случай MariaDB Server 10.3 на Ubuntu 18.04.

$ docker pull mariadb

Можем да проверим изтегленото изображение.

$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
mariadb                                    latest              e07bb20373d8        2 weeks ago         349MB

След това ще създадем две директории в нашата MariaDB Docker директория, една за datadir и друга за конфигурационните файлове на MariaDB. Ще добавим и двете към нашия MariaDB Docker Container.

$ cd ~/Docker
$ mkdir datadir
$ mkdir config

Конфигурацията за стартиране е посочена във файла /etc/mysql/my.cnf и включва всички файлове, намерени в директорията /etc/mysql/conf.d, които завършват с .cnf.

$ tail -1 /etc/mysql/my.cnf
!includedir /etc/mysql/conf.d/

Съдържанието на тези файлове ще замени всеки повтарящ се параметър, конфигуриран в /etc/mysql/my.cnf, така че можете да създадете алтернативна конфигурация тук.

Нека стартираме нашия първи MariaDB Docker контейнер:

$ docker run -d --name mariadb1 \
-p 33061:3306 \
-v ~/Docker/mariadb1/config:/etc/mysql/conf.d \
-v ~/Docker/mariadb1/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=dbtest \
mariadb

След това можем да проверим, че нашите контейнери работят:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                     NAMES
12805cc2d7b5        mariadb             "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:33061->3306/tcp   mariadb1

Дневникът на контейнера:

$ docker logs mariadb1
MySQL init process done. Ready for start up.
2019-06-03 23:18:01 0 [Note] mysqld (mysqld 10.3.15-MariaDB-1:10.3.15+maria~bionic) starting as process 1 ...
2019-06-03 23:18:01 0 [Note] InnoDB: Using Linux native AIO
2019-06-03 23:18:01 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-06-03 23:18:01 0 [Note] InnoDB: Uses event mutexes
2019-06-03 23:18:01 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-06-03 23:18:01 0 [Note] InnoDB: Number of pools: 1
2019-06-03 23:18:01 0 [Note] InnoDB: Using SSE2 crc32 instructions
2019-06-03 23:18:01 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
2019-06-03 23:18:01 0 [Note] InnoDB: Completed initialization of buffer pool
2019-06-03 23:18:01 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2019-06-03 23:18:01 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2019-06-03 23:18:01 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2019-06-03 23:18:01 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2019-06-03 23:18:02 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2019-06-03 23:18:02 0 [Note] InnoDB: Waiting for purge to start
2019-06-03 23:18:02 0 [Note] InnoDB: 10.3.15 started; log sequence number 1630824; transaction id 21
2019-06-03 23:18:02 0 [Note] Plugin 'FEEDBACK' is disabled.
2019-06-03 23:18:02 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-06-03 23:18:02 0 [Note] Server socket created on IP: '::'.
2019-06-03 23:18:02 0 [Note] InnoDB: Buffer pool(s) load completed at 190603 23:18:02
2019-06-03 23:18:02 0 [Note] Reading of all Master_info entries succeded
2019-06-03 23:18:02 0 [Note] Added new Master_info '' to hash table
2019-06-03 23:18:02 0 [Note] mysqld: ready for connections.
Version: '10.3.15-MariaDB-1:10.3.15+maria~bionic'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution

И съдържанието на пътя на нашия Docker datadir (хост):

$ ls -l ~/Docker/mariadb1/datadir/
total 249664
-rw-rw----   1 sinsausti  staff     16384 Jun  3 20:18 aria_log.00000001
-rw-rw----   1 sinsausti  staff        52 Jun  3 20:18 aria_log_control
drwx------   3 sinsausti  staff        96 Jun  3 20:18 dbtest
-rw-rw----   1 sinsausti  staff       976 Jun  3 20:18 ib_buffer_pool
-rw-rw----   1 sinsausti  staff  50331648 Jun  3 20:18 ib_logfile0
-rw-rw----   1 sinsausti  staff  50331648 Jun  3 20:17 ib_logfile1
-rw-rw----   1 sinsausti  staff  12582912 Jun  3 20:18 ibdata1
-rw-rw----   1 sinsausti  staff  12582912 Jun  3 20:18 ibtmp1
-rw-rw----   1 sinsausti  staff         0 Jun  3 20:17 multi-master.info
drwx------  92 sinsausti  staff      2944 Jun  3 20:18 mysql
drwx------   3 sinsausti  staff        96 Jun  3 20:17 performance_schema
-rw-rw----   1 sinsausti  staff     24576 Jun  3 20:18 tc.log

Имаме достъп до контейнера MariaDB, изпълнявайки следната команда и използвайки паролата, посочена в променливата MYSQL_ROOT_PASSWORD:

$ docker exec -it mariadb1 bash
[email protected]:/# mysql -p -e "SHOW DATABASES;"
Enter password:
+--------------------+
| Database           |
+--------------------+
| dbtest             |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

Тук можем да видим нашия dbtest създаден.

Команди на Docker

И накрая, нека видим някои полезни команди за управление на Docker.

  • Търсене на изображения
    $ docker search Image_Name
  • Изтегляне на изображение
    $ docker pull Image_Name
  • Избройте инсталираните изображения
    $ docker images
  • Списък на контейнери (като добавим флага -a, можем да видим и спрените контейнери)
    $ docker ps -a
  • Изтриване на изображение на Docker
    $ docker rmi Image_Name
  • Изтриване на Docker контейнер (контейнерът трябва да бъде спрян)
    $ docker rm Container_Name
  • Изпълнете контейнер от изображение на Docker (като добавим флага -p, можем да съпоставим порт на контейнер с локален хост)
    $ docker run -d --name Container_Name -p Host_Port:Guest_Port Image_Name
  • Спиране на контейнера
    $ docker stop Container_Name
  • Стартиране на контейнера
    $ docker start Container_Name
  • Проверете регистрационните файлове на контейнера
    $ docker logs Container_Name
  • Проверете информацията за контейнера
    $ docker inspect Container_Name
  • Създайте свързан контейнер
    $ docker run -d --name Container_Name --link Container_Name:Image_Name Image_Name
  • Свържете се с контейнер от localhost
    $ docker exec -it Container_Name bash
  • Създайте контейнер с добавен обем
    $ docker run -d --name Container_Name --volume=/home/docker/Container_Name/conf.d:/etc/mysql/conf.d Image_Name
  • Завършване на промени в ново изображение
    $ docker commit Container_ID Image_Name:TAG

Заключение

Docker е наистина полезен инструмент за лесно споделяне на среда за разработка с помощта на Dockerfile или публикуване на изображение на Docker. Като го използвате, можете да се уверите, че всички използват една и съща среда. В същото време също е полезно да пресъздадете или клонирате съществуваща среда. Docker може да споделя томове, да използва частни мрежи, да картографира портове и дори повече.

В този блог видяхме как да разположим MariaDB Server на Docker като самостоятелен сървър. Ако искате да използвате по-сложна среда като репликация или Galera Cluster, можете да използвате bitnami/mariadb, за да постигнете тази конфигурация.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция AVG() в MariaDB

  2. Как QUARTER() работи в MariaDB

  3. Съвети за наблюдение на MariaDB клъстер

  4. Как работи WEIGHT_STRING() в MariaDB

  5. Как да извършите операция при отказ за настройка на MySQL репликация