A versão mais recente da imagem do docker mysql oficial permite importar dados na inicialização. Aqui está meu docker-compose.yml
data:
build: docker/data/.
mysql:
image: mysql
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 1234
volumes:
- ./docker/data:/docker-entrypoint-initdb.d
volumes_from:
- data
Aqui, eu tenho meu data-dump.sql em
docker/data
que é relativo à pasta da qual o docker-compose está sendo executado. Estou montando esse arquivo sql neste diretório /docker-entrypoint-initdb.d
no recipiente. Se você estiver interessado em ver como isso funciona, dê uma olhada no
docker-entrypoint.sh
no GitHub. Eles adicionaram este bloco para permitir a importação de dados echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
Uma observação adicional, se você quiser que os dados sejam persistidos mesmo depois que o contêiner mysql for interrompido e removido, você precisa ter um contêiner de dados separado como você vê no docker-compose.yml. O conteúdo do Dockerfile do contêiner de dados é muito simples.
FROM n3ziniuka5/ubuntu-oracle-jdk:14.04-JDK8
VOLUME /var/lib/mysql
CMD ["true"]
O contêiner de dados nem precisa estar no estado inicial para persistência.