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

2

No CentOS 7, eu entendo que estamos mudando de mysql-server para MariaDB compatível com a implementação. Estou usando uma imagem do docker de centos:latest , 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 de root e 2) executar um servidor de dentro de um Dockerfile

No paradigma do docker, eu 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 encontrei uma resposta equivalente em yum : Como eu instalo, configuro e executo o mariadb no Centos 7 como se ele estivesse sendo instalado via script Bash? mysql_secure_installation parece exigir um TTY.

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

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

Aqui está minha variante atual do Dockerfile (neste, tentando um tail -f para manter o processo ativo como CMD )

FROM    centos:latest
MAINTAINER Me ([email protected])

RUN yum -y install wget epel-release
RUN cd /usr/local/src && wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && rpm -Uvh remi-*.rpm && rm remi-*.rpm
RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/remi*.repo
RUN 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-*.rpm
RUN rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
RUN sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/rpmforge*.repo
RUN yum -y update
RUN yum -y upgrade

# mysql
RUN yum -y install mariadb-server
RUN yum -y install initscripts
WORKDIR /usr
#RUN echo "bind-address=0.0.0.0" >> /etc/my.cnf
RUN /usr/bin/mysql_install_db --datadir="/var/lib/mysql" --user=mysql
RUN /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 SOMEPASSWORD
CMD tail -f /var/log/mariadb/mariadb.log
EXPOSE 3306

Relacionados:

por editor 07.10.2014 / 22:05

1 resposta

0

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

Eu também corri para 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, portanto, você teria que iniciar o mysql para cada comando ou executá-los em uma única etapa. Isto é o que eu tenho no meu Dockerfile:

ARG DATABASE_ROOT_PASS

RUN 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 construir com

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

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

    
por 01.05.2017 / 22:01