Tworzę głównie za pomocą programu Visual Studio w systemie Windows. Problem polega na tym, że po pewnym czasie system Windows ugrzęznie i muszę ponownie zainstalować system Windows. Podobnie przejście na nowe maszyny jest problemem.
Ponowna instalacja systemu Windows jest bolesna, ponieważ moje środowisko programistyczne ma wiele zależności (takich jak dodatkowe pliki konfiguracyjne MSBuild, rozszerzenia VS, npm, Java itp.). Nie wyobrażam sobie, że jestem sam, mając skomplikowany system, a jego przywrócenie zajęłoby prawdopodobnie dzień minimum.
Tak naprawdę nie korzystałem z Dockera, ale teoretycznie brzmi to tak, jakbym mógł skonfigurować moje środowisko programistyczne w Windows Container, a następnie po prostu go rozesłać (np. Skopiować na mój laptop, zainstalować nową instalację Windows) i powinno to być bezbolesne .
Czy to, co opisuję, jest możliwe? Czy są jakieś wady, takie jak wydajność, niezawodność? Inne gotcha?
Odpowiedzi:
Nie jest to rzadki problem, ale Docker nie jest właściwym narzędziem do jego rozwiązania. Kontenery ogólnie (w tym Docker) mają na celu zapewnienie środowiska wykonawczego aplikacji dla pojedynczego procesu , takiego jak serwer WWW, a nie dla scenariusza wieloprocesowego, takiego jak środowisko programistyczne. W może być zrobione, ale nie jest to bardzo eleganckie rozwiązanie.
Lepszym (i bardziej powszechnym) podejściem jest tworzenie maszyn wirtualnych za pomocą tradycyjnego hiperwizora, takiego jak VirtualBox lub Hyper-V (ponieważ korzystasz z systemu Windows). Typowy przepływ pracy to:
Vagrant to także fantastyczne narzędzie do wykonywania większości powyższych czynności w bardziej uporządkowany sposób.
Zaletą tego wszystkiego jest to, że masz teraz znormalizowane środowiska, które można udostępniać całemu zespołowi, oszczędzając wszystkim wysiłku. Jest to szczególnie przydatne w przypadku szybkiego dołączania nowych osób.
Wracając do twojego pierwotnego pytania, Docker tak naprawdę nie jest do tego przeznaczony, ale jeśli masz wystarczająco małe środowisko programistyczne (powiedzmy PHP w Linuksie), możesz to zrobić w kontenerze, a korzyścią będzie znacznie mniejszy obraz (potencjalnie poniżej 100 MB w porównaniu do wielu GB dla maszyny wirtualnej z systemem Windows z dyskiem wirtualnym).
źródło
nie w jednym kontenerze dokowanym, ale tak w n kontenerach dokowanych.
Chociaż możesz - teoretycznie - zmontować całe środowisko programistyczne w jednym pojemniku, doker nie miał tego robić.
Zamiast tego powinieneś wdrożyć każdą usługę w osobnych kontenerach, używając komponowania dokowania , zarządzając całą infrastrukturą w jednym pliku, gdzie każda usługa będzie miała swój własny plik dziennika, przestrzeń użytkownika, sieć itp.
Dam wam przykład, to jest mój szkic
docker-compose.yml
Istnieje serwer proxy Nginx (myproxy), dwie podobne bazy danych Postgres (mydb1 i 2), stary serwer aplikacji Java (www), kontener Java Jet, który zapewnia usługę spoczynkową, a na koniec bardzo prosty kontener Postfix SMTP.
Wszystko zaczyna się - zwykle :) - z
docker-compose up
albo na mojej maszynie deweloperskiej, albo w produkcji; pliki dziennika są agregowane w jeden łatwy do odczytania plik i można replikować lokalnie prawie każdą funkcjonalność z gwarancją, że jeśli działa na moim laptopie, będzie działać.źródło
Używam maszyn wirtualnych VirtualBox do tego rodzaju rzeczy.
Przenośność środowiska deweloperskiego w kontenerze jest przydatna, ale naprawdę fajną rzeczą jest to, że mogę wykonać migawkę przed próbą ulepszenia, a jeśli to spieprzę, nie będzie problemu, aby cofnąć się i zacząć od nowa.
Przydaje mi się również to, ponieważ często pracuję z wieloma wersjami rzeczy, takimi jak Qt, i nie mam ochoty wymyślić, jak sprawić, by obie wersje współistniały - zamiast tego po prostu umieszczam je na różnych maszynach wirtualnych i Nie muszę się martwić interakcjami, ponieważ zainstalowałem coś niepoprawnie.
źródło