Chcę utworzyć obraz dokera na szczycie mysql, który już zawiera schemat niezbędny dla mojej aplikacji.
Próbowałem dodać wiersze do pliku Docker, który zaimportuje mój schemat jako plik sql. Zrobiłem to jako takie (mój plik Docker):
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"
W moim rozumieniu, to nie zadziałało, ponieważ obraz dokowanego mysql nie zawiera klienta mysql (najlepsze praktyki stwierdzają, że „nie dodawaj rzeczy tylko dlatego, że będą miło mieć”) (czy się mylę?)
co może być dobrym sposobem na to? Miałem na myśli kilka rzeczy, ale wszystkie wydają się być niechlujnymi obejściami.
- zainstaluj klienta mysql, zrób to, co mam z nim zrobić, a następnie usuń / wyczyść go.
- skopiuj plik binarny klienta mysql do obrazu, zrób to, co muszę, a następnie usuń go.
- Utwórz schemat na innym serwerze sql i skopiuj bezpośrednio plik db (wydaje się to bardzo niechlujne i brzmi jak skażona pula problemów)
Jakieś sugestie? Mam nadzieję, że w sposób, który będzie później łatwy do utrzymania i być może zgodny z najlepszymi praktykami?
Odpowiedzi:
Powinieneś umieścić swój skrypt init w katalogu zamontowanym jako
/docker-entrypoint-initdb.d
- patrz sekcja „Inicjowanie świeżej instancji” w dokumentacji obrazów MySQL Docker .źródło
/docker-entrypoint-initdb.d
był u gospodarza, ale tak naprawdę jest w kontenerze. ZmieniłemADD
polecenie, aby skopiować do tego katalogu i usunąłemRUN
polecenie. Docker zbudował obraz z powodzeniem, przetestowałem go i działa.Musiałem to zrobić w celach testowych.
Oto jak to zrobiłem, wykorzystując rzeczywiste obrazy MySQL / MariaDB w dockerhub i kompilacji wieloetapowej:
Pełny przykład działania tutaj: https://github.com/lindycoder/prepopulated-mysql-container-example
źródło
Kredyty dla @Martin Roy
Wprowadzono drobne zmiany w pracy dla mysql ...
Plik Docker treści
Treść setup.sql
Pełny przykład działania tutaj: https://github.com/iamdvr/prepopulated-mysql-container-example
źródło
Oprogramowanie do zarządzania, takie jak Ansible, może pomóc w łatwej automatyzacji importu mysql bez konieczności instalowania i ponownej instalacji klienta. Ansible ma świetne wbudowane funkcje do zarządzania obrazami dokerów i kontenerów i baz danych mysql.
źródło