4. Установка и использование MariaDB через Docker

Установка и использование MariaDB через Docker

Иногда мы хотим установить определенную версию MariaDB, MariaDB Galera Cluster или MaxScale в определенной системе, но пакеты недоступны. Или, может быть, мы просто хотим изолировать MariaDB от остальной системы, чтобы быть уверенными, что мы не нанесем никакого ущерба.

Виртуальная машина определенно подойдет для этой области. Однако это означает установку системы поверх другой системы. Это требует много ресурсов.

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

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

Docker - это проект с открытым исходным кодом, выпущенный под лицензией Apache License, версия 2.

Обратите внимание: хотя в ваших репозиториях пакетов может быть вызванный пакет docker, мы, вероятно, говорим не о Docker. Пакет Docker может называться docker.ioили docker-engine.

Установка Docker в вашу систему с помощью универсального сценария установки

Приведенный ниже сценарий установит репозитории Docker, необходимые модули ядра и пакеты в наиболее распространенных дистрибутивах Linux:

curl -sSL https://get.docker.com/ | sh

Запуск dockerd

В некоторых системах вам, возможно, придется запустить dockerd daemonсамостоятельно:

 

sudo sudo groupadd docker 
sudo gpasswd -a $USER docker

Использование образов MariaDB

Самый простой способ использовать MariaDB в Docker - выбрать образ MariaDB и создать контейнер.

Скачивание изображения

Вы можете загрузить образ MariaDB для Docker из официального репозитория MariaDB или выбрать другой образ, который лучше соответствует вашим потребностям. Вы можете найти образ в Docker Hub (официальный набор репозиториев) с помощью этой команды:

 docker search mariadb

Как только вы найдете образ, который хотите использовать, вы можете загрузить его через Docker. Также будут загружены некоторые слои, включая необходимые зависимости. Обратите внимание, что после загрузки слоя для определенного образа Docker не нужно будет повторно загружать его для другого образа.

Например, если вы хотите установить образ MariaDB по умолчанию, вы можете ввести:

docker pull mariadb / server: 10.4

Это установит версию 10.4. Версии 10.1, 10.2 и 10.3 также являются допустимым выбором.

Вы увидите список необходимых слоев. Для каждого слоя Dockers сообщит, присутствует ли он уже, или о ходе его загрузки.

Чтобы получить список установленных образов:

docker images

Создание контейнера

Изображение - это не запущенный процесс; это просто программное обеспечение, которое нужно запустить. Чтобы запустить его, мы должны сначала создать контейнер. Команду, необходимую для создания контейнера, обычно можно найти в документации к изображению. Например, чтобы создать контейнер для официального образа MariaDB:

docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD = mypass -d mariadb / server: 10.3

mariadbtestэто имя, которое мы хотим присвоить контейнеру. Если мы не укажем имя, идентификатор будет автоматически сгенерирован.

10.1 и 10.2 также являются допустимыми целевыми версиями:

docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD = mypass -d mariadb / server: 10.1
docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD = mypass -d mariadb / server: 10.2

При желании после имени образа мы можем указать некоторые параметры для mysqld . Например:

docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD = mypass -d mariadb / server: 10.3 --log-bin --binlog-format = MIXED

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

docker ps

У нас должен получиться результат, подобный этому:

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
819b786a8b48 mariadb / server "/ docker-entrypoint. 4 минуты назад Вверх на 4 минуты 3306 / tcp mariadbtest        

Запуск и остановка контейнера

Docker позволяет нам перезапустить контейнер с помощью одной команды:

docker restart  mariadbtest

Контейнер также можно остановить так:

docker stop mariadbtest

Контейнер не будет уничтожен этой командой. Данные по-прежнему будут находиться внутри контейнера, даже если MariaDB не запущен. Чтобы перезапустить контейнер и увидеть наши данные, мы можем выполнить:

docker start mariadbtest

С docker stopконтейнер будет корректно завершен: SIGTERMсигнал будет отправлен mysqldпроцессу, и Docker будет ждать завершения процесса, прежде чем вернуть управление оболочке. Однако также можно установить тайм-аут, по истечении которого процесс будет немедленно остановлен с помощью SIGKILLИли можно немедленно убить процесс, без таймаута.

docker stop --time = 30 mariadbtest
докер убить мариадбтест

В случае, если мы хотим уничтожить контейнер, возможно, потому что изображение не соответствует нашим потребностям, мы можем остановить его, а затем запустить:

docker rm mariadbtest

Обратите внимание, что приведенная выше команда не уничтожает том данных, который Docker создал для / var / lib / mysql. Если вы хотите также уничтожить том, используйте:

docker rm -v mariadbtest

Приостановка контейнеров

Контейнер также можно заморозить с помощью pauseкоманды. Docker заморозит процесс с помощью групп. MariaDB не будет знать, что он замораживается, и, когда мы unpauseэто сделаем , MariaDB возобновит свою работу, как ожидалось.

Оба pauseи unpauseпринимают одно или несколько имен контейнеров. Итак, если мы запускаем кластер, мы можем заморозить и возобновить работу всех узлов одновременно:

docker pause   node1 node2 node3
docker unpause node1 node2 node3

Приостановка контейнера очень полезна, когда нам нужно временно освободить ресурсы нашей системы. Если в данный момент контейнер не имеет решающего значения (например, он выполняет некоторую пакетную работу), мы можем освободить его, чтобы другие программы работали быстрее.

Устранение проблем с контейнером

Зайти в контейнер можно с помощью одной из команд:

docker exec -ti suspicious_shockley  bash

docker exec -ti suspicious_shockley  sh

Эта команда показывает, что демон отправил на стандартный вывод с момента последней попытки запуска - текст, который мы обычно видим при вызове mysqldиз командной строки.

В некоторых системах, включая последние выпуски Ubuntu, такие команды, как docker stop mariadbtestи, docker restart mariadbtestмогут завершаться с ошибкой разрешений. Это может быть вызвано пакетом AppArmor и даже sudoне позволит вам выполнить команду. Вы можете полностью удалить AppArmor, используя следующие команды:

sudo apt-get purge --auto-remove apparmor
перезапуск докера службы sudo
docker system prune --all --volumes

После этого перезапуск системы позволит Docker нормально работать. Дополнительная информация доступна на форумах Docker: https://forums.docker.com/t/can-not-stop-docker-container-permission-denied-error/41142/3

Доступ к контейнеру

Чтобы получить доступ к контейнеру через Bash, мы можем запустить эту команду:

docker exec -it mariadbtest bash

Теперь мы можем использовать обычные команды Linux, такие как cd , ls и т. Д. У нас будут права root. Мы даже можем установить наш любимый файловый редактор, например:

apt-get update
apt-get install vim

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

Обратите внимание: если мы запустим mysqladmin shutdown или команду SHUTDOWN для остановки контейнера, контейнер будет деактивирован, и мы автоматически выйдем в нашу систему.

Подключение к MariaDB извне контейнера

Если мы попытаемся подключиться к серверу MariaDB localhost, клиент будет обходить сеть и пытаться подключиться к серверу, используя файл сокета в локальной файловой системе. Однако это не работает, когда MariaDB работает внутри контейнера, потому что файловая система сервера изолирована от хоста. Клиент не может получить доступ к файлу сокета, который находится внутри контейнера, поэтому не может подключиться.

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

Для большинства образов MariaDB, включая официальный, внешние TCP-соединения отключены с помощью bind-addressпараметра в файле # my.cnf #. Образ докера, используемый в этом руководстве, основан на Ubuntu, поэтому файл находится по адресу /etc/mysql/my.cnf.

Чтобы использовать MariaDB, нам нужно будет отредактировать файл конфигурации, чтобы изменить соответствующий параметр, а затем перезапустить контейнер.

Внутри контейнера отредактируйте файл my.cnfи проверьте, не начинается ли строка bind-addressПоместите хеш в начале строки, чтобы закомментировать ее:

# адрес привязки = 127.0.0.1

Сохраните файл.

Еще находясь внутри контейнера, отправьте команду выключения в MariaDB. Это выключит сервер, а также выйдет обратно на хост:

mysqladmin -u root -p выключение

Снова запустите контейнер. На этот раз на сервере MariaDB будет включена сеть:

docker start mariadbtest

Найдите IP-адрес, который был назначен контейнеру:

docker inspect -f '{{диапазон .NetworkSettings.Networks}} {{. IPAddress}} {{end}}' mariadbtest

Теперь вы можете подключиться к серверу MariaDB, используя TCP-соединение с этим IP-адресом.

Принудительное TCP-соединение

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

На хосте запустите клиент и установите адрес сервера («-h») равным IP-адресу контейнера, который вы нашли на предыдущем шаге:

mysql -h 172.17.0.2 -u root -p

Эта простая форма подключения должна работать в большинстве ситуаций. В зависимости от вашей конфигурации может также потребоваться указать порт для сервера или включить режим TCP:

mysql -h 172.17.0.2 -P 3306 --prot

 

  • 0 Users Found This Useful
這篇文章有幫助嗎?

相關文章

3. Установка Docker в Centos 7

Установка Docker в Centos 7   В Centos 7 Docker устанавливается так же штатно, через...

2. Шпаргалка с командами Docker

Шпаргалка с командами Docker Реестры и репозитории Docker Вход в реестр docker login...

1. Что такое Docker?

Docker   Перейти к навигации Перейти к поиску Docker Тип...

Инструкции по использованию John the Ripper

Инструкции по использованию John the Ripper       Программа John the Ripper создавалась для...