Instalando, configurando e executando o mariadb em primeiro plano no Centos 7 via docker sem systemd ou serviços

Sob CentOS 7, eu entendo que estamos nos movendo de mysql-server para MariaDB compatível com implementação. Estou usando uma imagem docker de centos:latest, o que me coloca sob os auspícios do Centos 7.

mysqld_safe executa o bloqueio em primeiro plano. Isso torna mais fácil: eu só preciso 0) instalar o pacote 1) Alterar a senha raiz e 2) executar um servidor de dentro de um Dockerfile

No paradigma docker, pois preciso ser capaz de instalar o MariaDB como se estivesse em um script bash. Eu encontrei várias maneiras de fazer isso usando aptitude no Ubuntu, mas ainda não encontrou uma resposta equivalente em yum: Como faço para instalar, configurar e executar o mariadb no Centos 7 como se estivesse sendo instalado via script Bash? mysql_secure_installation parece exigir um TTY.

Eu tentei executar o mysqladmin comando de senha manualmente, mas reclama que não pode se conectar a uma instância MySQL em execução. Como os contêineres são jogados fora entre as etapas, acredito que preciso executar o mysql de alguma forma e alterar a senha na mesma etapa.

Eu tentei instalar initscripts pacote me recebe /bin/service mas ele tenta me redirecionar para usar systemctl start mariadb.service, que não é utilizável porque os contêineres Docker obtêm um fakesystemd e não systemd. Alguma ideia?

Aqui está minha variante Dockerfile atual (neste, tentando um tail -f para manter o processo vivo como um 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

Relacionado:

Estou trabalhando em um problema semelhante, configurando o mariadb em um contêiner Docker. Eu encontrei presente procurando maneiras de executar mysql_secure_install. Existem maneiras de alimentar a entrada para o script, ou você pode simplesmente executar os comandos que o script executaria. Optei pelo último.

Também tive o mesmo problema de os comandos não encontrarem uma instância MySQL em execução. O problema é que cada etapa de sua compilação é executada em um contêiner separado, então você teria que iniciar o mysql para cada comando ou executá-los todos em uma etapa. Isso é o que eu tenho no meu 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"

Você pode então construí-lo com

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

Você pode encontrar a documentação para -- build-arg aqui.

Você me entendeu mal. Meu problema com ele é não executar o serviço como um service em systemd, como qualquer outra tecnologia de contêiner faria.

Ahh, razão #1 Por Que Eu não gosto Docker.

Para o registro, existem imagens Docker oficialmente suportadas - mas elas não são executadas no CentOS , e eu sou um fã do CentOS"."