Instalación, configuración y ejecución de mariadb en primer plano en Centos 7 a través de docker sin systemd ni servicios

Bajo CentOS 7, entiendo que nos estamos moviendo de mysql-server a MariaDB compatible con la implementación. Estoy usando una imagen de docker de centos:latest, lo que me pone bajo los auspicios de Centos 7.

mysqld_safe ejecuta el bloqueo en primer plano. Eso lo hace fácil: solo necesito 0) instalar el paquete 1) cambiar la contraseña de root y 2) ejecutar un servidor desde un Dockerfile

En el paradigma de docker, necesito poder instalar MariaDB como si estuviera en un script bash. He encontrado varias formas de hacer esto usando aptitude en Ubuntu, pero aún no he encontrado una respuesta equivalente en yum: ¿Cómo instalo, configuro y ejecuto mariadb en Centos 7 como si se estuviera instalando a través de un script Bash? mysql_secure_installation parece requerir un TTY.

He intentado ejecutar el mysqladmin comando de contraseña manualmente, pero se queja de que no puede conectarse a una instancia de MySQL en ejecución. Debido a que los contenedores se desechan entre pasos, creo que de alguna manera necesito ejecutar mysql y cambiar la contraseña en el mismo paso.

He intentado instalar initscripts paquete me pone /bin/service pero intenta redirigirme a usar systemctl start mariadb.service, que no se puede usar porque los contenedores Docker obtienen un fakesystemd y no systemd. Alguna idea?

Aquí está mi variante actual de Dockerfile (en esta, probar un tail -f para mantener vivo el proceso como 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

Relacionados:

Estoy trabajando en un problema similar, configurando mariadb en un contenedor Docker. Encontré este buscando formas de ejecutar mysql_secure_install. Hay formas de alimentar la entrada al script, o simplemente puede ejecutar los comandos que ejecutaría el script. Opté por lo último.

También me encontré con el mismo problema de que los comandos no encuentran una instancia de MySQL en ejecución. El problema es que cada paso de su compilación se ejecuta en un contenedor separado, por lo que tendría que iniciar mysql para cada comando, o ejecutarlos todos en un solo paso. Esto es lo que tengo en mi 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"

A continuación, puede construirlo con

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

Puede encontrar la documentación para build build-arg aqui.

Me malinterpretas. Mi problema con él es que no ejecuta el servicio como un servicio en systemd, como lo haría cualquier otra tecnología de contenedores.

Ahh, razón #1 por la que no me gusta Docker.

Para que conste, hay imágenes Docker oficialmente compatibles, pero no se ejecutan en CentOS, y soy un poco fanático de CentOS."