Mam przeczucie, że docker może znacznie usprawnić mój przepływ pracy w webdevie - ale nie udało mi się dokładnie wyjaśnić, jak podejść do projektu dodającego docker do stosu.
Podstawowy stos oprogramowania wyglądałby następująco:
Oprogramowanie
Obraz (y) platformy Docker udostępniający niestandardowy stos LAMP
- Apache z kilkoma modułami
- MYSQL
- PHP
- Niektóre CMS, np. Silverstripe
GIT
Przepływ pracy
Mogłem sobie wyobrazić przepływ pracy wyglądający mniej więcej tak:
Rozwój
- Napisz a,
Dockerfile
który definiuje pojemnik LAMP spełniający powyższe wymagania- REQ: Maszyna powinna uruchomić apache / mysql zaraz po uruchomieniu
- Zbuduj obraz dockera
- Skopiuj pliki wymagane do uruchomienia CMS np
~/dev/cmsdir
- Poddaj się
~/dev/cmsdir/
kontroli wersji
- Poddaj się
- Uruchom kontener Dockera i w jakiś sposób podłącz
~/dev/cmsdir
go/var/www/
do kontenera - Wypełnij bazę danych
- Pracuj w
/dev/cmsdir/
- Zatwierdź i zamknij kontener Dockera
Rozlokowanie
- Skonfiguruj zdalnego hosta (np. Z ansible)
- Wypchnij obraz kontenera do zdalnego hosta
- Pobierz
cmsdir
-project przez git - Uruchom kontener Docker, ściągnij bazę danych i zamontuj
cmsdir
do/var/www
Na papierze to wszystko wygląda całkiem nieźle, ALE nie jestem do końca pewien, czy w ogóle byłoby to właściwe podejście.
Pytania:
Podczas tworzenia lokalnego, w jaki sposób mogę sprawić, aby baza danych zachowała się między ponownymi uruchomieniami instancji kontenera? A może musiałbym za każdym razem uruchamiać sql-dump przed zakręceniem kontenera?
Czy powinienem mieć oddzielne instancje kontenera dla bazy danych i serwera Apache? A może wystarczyłoby mieć jeden pojemnik na powyższy przypadek użycia?
Jeśli używasz oddzielnych kontenerów dla bazy danych i serwera, w jaki sposób mógłbym zautomatyzować ich jednoczesne włączanie i wyłączanie?
Jak właściwie zamontować
/dev/cmsdir/
w katalogu-kontenery/var/www/
? Czy powinienem do tego wykorzystać woluminy danych ?Czy przegapiłem jakieś pułapki? Coś, co można uprościć?
Odpowiedzi:
Jeśli potrzebujesz trwałości bazy danych niezależnie od kontenera CMS, możesz użyć jednego kontenera dla MySQL i jednego kontenera dla swojego CMS. W takim przypadku możesz mieć swój kontener MySQL nadal działający i możesz niezależnie wdrażać swój CMS tak często, jak chcesz.
Do programowania - inną opcją jest mapowanie katalogów danych mysql z komputera głównego / programistycznego przy użyciu woluminów danych. W ten sposób możesz zarządzać plikami danych dla mysql (w dockerze) używając git (na hoście) i "przeładuj" stan początkowy w dowolnym momencie (przed uruchomieniem kontenera mysql).
Tak, myślę, że powinieneś mieć osobny pojemnik na db.
Używam tylko podstawowego skryptu:
Tak, możesz użyć przełącznika data-volume -v. Użyłbym tego do rozwoju. Możesz użyć montowania tylko do odczytu, więc żadne zmiany nie zostaną wprowadzone w tym katalogu, jeśli chcesz (Twoja aplikacja i tak powinna przechowywać dane w innym miejscu).
W każdym razie, do ostatecznego wdrożenia, zbudowałbym i utworzył obraz za pomocą dockerfile z
ADD /home/user/dev/cmsdir /var/www/cmsdir
Nie wiem :-)
źródło
Chcesz użyć docker-compose. Postępuj zgodnie z samouczkiem tutaj. Bardzo prosty. Wydaje się, że zaznaczasz wszystkie pola.
https://docs.docker.com/compose/
źródło
Rozumiem, że ten post ma już ponad rok, ale ostatnio zadałem sobie bardzo podobne pytania i mam kilka świetnych odpowiedzi na Twoje pytania.
Możesz skonfigurować instancję dokera MySQL i zachować dane w bezstanowym kontenerze danych, co oznacza, że kontener danych nie musi być aktywnie uruchomiony
Tak, poleciłbym mieć oddzielną instancję dla serwera WWW i bazy danych. To jest moc Dockera.
Sprawdź to repozytorium , które budowałem. Zasadniczo jest to tak proste, jak
make build
&make run
i możesz mieć serwer WWW i kontener bazy danych działające lokalnie.Użyć
-v
argumentu podczas uruchamiania pojemnika po raz pierwszy, to odwołuje się folder konkretnego na pojemniku do hosta z systemem pojemnik.Myślę, że Twoje pomysły są świetne i obecnie możliwe jest osiągnięcie wszystkiego, o co prosisz.
Oto gotowe rozwiązanie spełniające wszystkie wymienione przez Ciebie potrzeby.
źródło
Przygotowałem łatwą w użyciu konfigurację Docker Compose , która powinna odpowiadać Twoim wymaganiom dotyczącym przepływu pracy.
https://github.com/ehyland/docker-silverstripe-dev
Główne cechy
HHVM
+NGINX
lubApache2
+PHP5
Plik README.md powinien być wystarczająco jasny, abyś mógł zacząć.
źródło