Установка, настройка и запуск mariadb на переднем плане в Centos 7 через docker без systemd или служб

Насколько я понимаю, в CentOS 7 мы переходим от mysql-server к совместимому с реализацией MariaDB. Я использую изображение docker для centos:latest, что ставит меня под покровительство Centos 7.

mysqld_safe запускает блокировку на переднем плане. Это упрощает задачу: мне просто нужно 0) установить пакет, 1) изменить пароль root и 2) запустить сервер из Dockerfile

В парадигме docker, потому что мне нужно иметь возможность устанавливать MariaDB, как если бы это было в сценарии bash. Я нашел различные способы сделать это, используя aptitude под Ubuntu, но еще предстоит найти эквивалентный ответ под yum: Как мне установить, настроить и запустить mariadb на Centos 7, как если бы он устанавливался с помощью Bash-скрипта? mysql_secure_installation по-видимому, требуется TTY.

Я пробовал запускать mysqladmin ввод пароля вручную, но он жалуется, что не может подключиться к запущенному экземпляру MySQL. Поскольку контейнеры выбрасываются между шагами, я считаю, что мне нужно каким-то образом запустить mysql и изменить пароль на том же шаге.

Я пробовал устанавливать initscripts посылка доставляет меня /bin/service но он пытается перенаправить меня на использование systemctl start mariadb.service, который нельзя использовать , потому что контейнеры Docker получают fakesystemd и не systemd. Есть какие-нибудь идеи?

Вот мой текущий вариант Dockerfile (в этом, пытаясь tail -f чтобы поддерживать этот процесс в качестве CMD)

FROM    centos:latestMAINTAINER Me (some@guy.com)RUN yum -y install wget epel-releaseRUN cd /usr/local/src && wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && rpm -Uvh remi-*.rpm && rm remi-*.rpmRUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/remi*.repoRUN cd /usr/local/src && wget http://apt.sw.be/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm  && rpm -Uvh rpmforge-*.rpm && rm rpmforge-*.rpmRUN rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txtRUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/rpmforge*.repoRUN yum -y updateRUN yum -y upgrade# mysqlRUN yum -y install mariadb-serverRUN yum -y install initscriptsWORKDIR /usr#RUN echo "bind-address=0.0.0.0" >> /etc/my.cnfRUN /usr/bin/mysql_install_db --datadir="/var/lib/mysql" --user=mysqlRUN /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --user=mysql  >/dev/null 2>&1 &RUN /usr/bin/mysqladmin -u root password SOMEPASSWORDCMD tail -f /var/log/mariadb/mariadb.logEXPOSE 3306

Связанный:

Я работаю над аналогичной проблемой, настраивая mariadb в контейнере Docker. Я нашел этот ищу способы запустить mysql_secure_install. Есть способы передать входные данные в скрипт, или вы можете просто выполнить команды, которые будет выполнять скрипт. Я выбрал последнее.

Я также столкнулся с той же проблемой, когда команды не находили запущенный экземпляр MySQL. Проблема в том, что каждый шаг вашей сборки выполняется в отдельном контейнере, поэтому вам придется запускать mysql для каждой команды или запускать их все за один шаг. Это то, что у меня есть в моем файле Dockerfile:

ARG DATABASE_ROOT_PASSRUN service mysql start \    && mysqladmin -u root password "$DATABASE_ROOT_PASS" \    && mysql -u root -p"$DATABASE_ROOT_PASS" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_ROOT_PASS') WHERE User='root'" \    && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" \    && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.user WHERE User=''" \    && mysql -u root -p"$DATABASE_ROOT_PASS" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" \    && mysql -u root -p"$DATABASE_ROOT_PASS" -e "FLUSH PRIVILEGES"

Затем вы можете создать его с помощью

docker build . --build-arg DATABASE_ROOT_PASS='changeme123'

Вы можете найти документацию для --build-arg здесь.

Вы меня неправильно поняли. Моя проблема с этим заключается в том, что not запускает службу _ as a service_ под systemd, как это сделала бы любая другая контейнерная технология.

Ах, причина № 1, почему мне не нравится Docker.

Для справки, существуют официально поддерживаемые образы Docker, но они не работают на CentOS, а я в некотором роде “фанат CentOS”.