Quero criar uma imagem do docker em cima do mysql que já contenha o esquema necessário para o meu aplicativo.
Tentei adicionar linhas ao Dockerfile que importariam meu esquema como um arquivo sql. Fiz isso como tal (meu Dockerfile):
FROM mysql
ENV MYSQL_ROOT_PASSWORD="bagabu"
ENV MYSQL_DATABASE="imhere"
ADD imhere.sql /tmp/imhere.sql
RUN "mysql -u root --password="bagabu" imhere < /tmp/imhere.sql"
No meu entender, isso não funcionou porque a imagem do docker mysql não contém um cliente mysql (o estado das práticas recomendadas "não adicione coisas apenas porque elas serão boas em ter") (estou errado sobre isso?)
qual pode ser uma boa maneira de fazer isso? Eu tinha algumas coisas em mente, mas todas elas parecem soluções alternativas complicadas.
- instale o cliente mysql, faça o que eu tenho que fazer com ele e remova / limpe-o.
- copie o binário do cliente mysql para a imagem, faça o que tenho que fazer e remova-o.
- Crie o esquema em outro servidor sql e copie o arquivo db diretamente (isso parece muito confuso e me parece um conjunto de problemas contaminado)
Alguma sugestão? Esperançosamente, de uma maneira que seja fácil de manter mais tarde e que talvez esteja em conformidade com as melhores práticas também?
Respostas:
Você deve colocar seu script init em um diretório montado como
/docker-entrypoint-initdb.d
- consulte a seção "Inicializando uma instância nova" nos documentos de imagem do MySQL Docker .fonte
/docker-entrypoint-initdb.d
estava no host, mas na verdade está no contêiner. Alterei oADD
comando para copiar para esse diretório e removi oRUN
comando. O Docker construiu a imagem com sucesso e eu a testei e funciona.Eu tive que fazer isso para fins de testes.
Aqui está como eu fiz, aproveitando as imagens reais do MySQL / MariaDB no dockerhub e na compilação de vários estágios:
Exemplo de trabalho completo aqui: https://github.com/lindycoder/prepopulated-mysql-container-example
fonte
Créditos a @Martin Roy
Fez pequenas alterações para trabalhar com o mysql ...
Content Dockerfile
Conteúdo setup.sql
Exemplo de trabalho completo aqui: https://github.com/iamdvr/prepopulated-mysql-container-example
fonte
Um software de gerenciamento como o Ansible pode ajudá-lo a automatizar uma importação mysql com facilidade, sem a necessidade de instalar e reinstalar um cliente. O Ansible possui ótimos recursos internos para gerenciar imagens e recipientes de janela de encaixe e bancos de dados mysql.
fonte