2015-03-27 8 views
5

Przenoszę istniejącą aplikację szyny do okna dokowanego i okna dokowanego. Istnieje kilka skryptów, które muszą być uruchamiane tylko podczas tworzenia kontenerów, na przykład skrypt, który kopiuje bazę danych prod do woluminu i indeksuje ją w Elasticsearch.Docker-Compose: Initialize vs Run

Odtąd, kiedy uruchamiam kontenery lokalnie do rozwoju, chcę uruchomić serwer do tworzenia szyn, a nie wszystkie skrypty startowe db. Mogłem utworzyć dwa pliki do tworzenia dokerów (na przykład init i run), które są takie same, z wyjątkiem opcji command: w kontenerze internetowej.

Czy istnieje lepszy sposób?

Odpowiedz

2

Podstawowy system Docker nie ma koncepcji "uruchomionego" dla niestandardowych skryptów.

Co można zrobić, to jeden z tych podejść:

  • Dodaj do skryptu sprawdzenie czy to już uczynił tego. Wtedy nie ma znaczenia, czy ponownie uruchomisz go ponownie.
  • Zintegruj bazę danych z dokowaniem i wyślij ją tak, jak została już wykonana z załadowanymi danymi.
  • Utwórz dwuczęściowy system dokowania: pierwszy będzie dokującym, który znasz teraz z możliwą komendą "ONBUILD", aby druga mogła uruchomić skrypt. Następnie drugi doker to taki, który dziedziczy oryginalny i uruchamia skrypt z lub bez powyższego "ONBUILD". W kompilacji docker miałbyś lokalną kompilację, która wyzwalałaby importowanie podczas tworzenia lokalnego obrazu docker.

tylko pomysł

0

Można użyć extends w Compose pliki * .yml.

Extend documentation and examples.

+0

„Kiedy przedłużyć usługę, linki i opcje konfiguracyjne volumes_from nie są dziedziczone. - trzeba będzie zdefiniować te ręcznie przy każdym przedłużeniu go” Wciąż lepsze to niż tworzenie całego nowego pliku do tworzenia dokerów, ale nie tak suche, jak mogłoby być. Naprawdę chcę tylko, aby jedna lub dwie linie różniły się między dwoma plikami składającymi dokowanie, więc rozszerzenie dokera-komponowania powinno mieć tylko jedną lub dwie linie. – cyniphile