Jeśli spojrzysz na funkcje Dockera, większość z nich jest już udostępniana przez LXC.
Co więc dodaje Docker? Dlaczego miałbym używać Dockera zamiast zwykłego LXC?
Z Docker FAQ :
Docker nie zastępuje lxc. „lxc” odnosi się do możliwości jądra Linuksa (w szczególności przestrzeni nazw i grup kontrolnych), które umożliwiają między sobą procesy piaskownicowe i kontrolowanie ich alokacji zasobów.
Oprócz niskiego poziomu funkcji jądra, Docker oferuje narzędzie wysokiego poziomu z kilkoma potężnymi funkcjami:
Przenośne wdrażanie na różnych komputerach.Docker definiuje format pakowania aplikacji i wszystkich jej zależności w jeden obiekt, który można przenieść na dowolną maszynę obsługującą okno dokowane i wykonać tam z gwarancją, że środowisko wykonawcze narażone na działanie aplikacji będzie takie samo. Lxc implementuje sandboxing procesu, który jest ważnym warunkiem wstępnym dla przenośnego wdrożenia, ale sam ten nie wystarczy dla przenośnego wdrożenia. Jeśli przesłałeś mi kopię aplikacji zainstalowanej w niestandardowej konfiguracji lxc, prawie na pewno nie działałaby na moim komputerze tak, jak na twojej, ponieważ jest powiązana z konkretną konfiguracją twojego komputera: sieć, pamięć masowa, logowanie, dystrybucja, itp. Docker definiuje abstrakcję dla tych ustawień specyficznych dla komputera, aby dokładnie ten sam kontener dokowania mógł działać - bez zmian - na wielu różnych komputerach,
Zorientowany na aplikacje. Docker jest zoptymalizowany pod kątem wdrażania aplikacji , w przeciwieństwie do maszyn. Znajduje to odzwierciedlenie w interfejsie API, interfejsie użytkownika, filozofii projektowania i dokumentacji. Natomiast skrypty pomocnicze lxc koncentrują się na kontenerach jako lekkich maszynach - w zasadzie serwerów, które uruchamiają się szybciej i wymagają mniej pamięci RAM. Uważamy, że pojemniki to coś więcej niż tylko to.
Automatyczna kompilacja . Docker zawiera narzędzie dla programistów do automatycznego składania kontenera na podstawie kodu źródłowego, z pełną kontrolą nad zależnościami aplikacji, narzędziami do tworzenia, pakowaniem itp. Mogą swobodnie korzystać z pakietów make, maven, chef, puppet, salt, debian, rpms, source tarballi lub dowolna ich kombinacja, niezależnie od konfiguracji maszyn .
Wersjonowanie. Docker zawiera podobne do git możliwości śledzenia kolejnych wersji kontenera, sprawdzania różnic między wersjami, zatwierdzania nowych wersji, wycofywania itp. Historia obejmuje również sposób montażu kontenera i przez kogo, dzięki czemu można uzyskać pełną identyfikowalność z serwera produkcyjnego aż do głównego dewelopera. Docker implementuje także przyrostowe wysyłanie i pobieranie, podobne do „git pull”, więc nowe wersje kontenera można przenosić, wysyłając tylko pliki różnic.
Ponowne użycie komponentu. Każdy kontener może być używany jako „obraz podstawowy” do tworzenia bardziej wyspecjalizowanych komponentów. Można to zrobić ręcznie lub jako część automatycznej kompilacji. Na przykład możesz przygotować idealne środowisko Pythona i użyć go jako podstawy dla 10 różnych aplikacji. Twoja idealna konfiguracja postgresql może być ponownie wykorzystana do wszystkich twoich przyszłych projektów. I tak dalej.
Dzielenie się. Docker ma dostęp do rejestru publicznego ( https://registry.hub.docker.com/ ), w którym tysiące ludzi przesłało przydatne kontenery: od redis, couchdb, postgres, przez bouncerów IRC, przez serwery aplikacji do railsów, po hadoop, po podstawowe obrazy różne dystrybucje. Rejestr zawiera również oficjalną „standardową bibliotekę” przydatnych kontenerów obsługiwanych przez zespół dokerów. Sam rejestr jest typu open source, więc każdy może wdrożyć własny rejestr do przechowywania i przesyłania prywatnych kontenerów, na przykład na potrzeby wewnętrznych serwerów.
Ekosystem narzędzi. Docker definiuje interfejs API do automatyzacji i dostosowywania tworzenia i wdrażania kontenerów. Istnieje ogromna liczba narzędzi integrujących się z dokerem w celu rozszerzenia jego możliwości. Wdrożenie podobne do PaaS (Dokku, Deis, Flynn), wielowęzłowa orkiestracja (maestro, sól, mesos, openstack nova), kokpity menedżerskie (docker-ui, openstack horizon, stocznia), zarządzanie konfiguracją (szef kuchni, marionetka), ciągła integracja (jenkins, strider, travis) itp. Docker szybko staje się standardem dla narzędzi opartych na pojemnikach.
Mam nadzieję, że to pomoże!
Rzućmy okiem na listę funkcji technicznych Dockera i sprawdź, które są dostarczane przez LXC, a które nie.
Funkcje:
Dostarczone ze zwykłym LXC.
Dostarczone ze zwykłym LXC.
Dostarczone ze zwykłym LXC.
Zapewnia to AUFS, unijny system plików, od którego zależy Docker. Możesz samodzielnie skonfigurować AUFS przy pomocy LXC, ale Docker używa go jako standardu.
Docker to zapewnia.
„Konfiguracja szablonów lub konfiguracja ręczna” to odniesienie do LXC, w którym należy dowiedzieć się o obu tych rzeczach. Docker pozwala traktować kontenery w sposób, w jaki jesteś przyzwyczajony do traktowania maszyn wirtualnych, bez wiedzy o konfiguracji LXC.
LXC już to zapewnia.
Dopiero zacząłem uczyć się o LXC i Dockerze, więc chętnie przyjmę wszelkie poprawki lub lepsze odpowiedzi.
źródło
unshare
narzędzia (lub bezpośrednioclone()
wywołania systemowego). Podobnie Docker ułatwia korzystanie z tych rzeczy (i zapewnia wiele innych funkcji na stole, takich jak możliwość pchania / ciągnięcia obrazów). Mój 2c.update-index
iread-tree
bez znanych narzędzi, takich jakadd
,commit
imerge
. Docker zapewnia tę warstwę „porcelany” nad „hydrauliką” LXC, umożliwiając pracę z koncepcjami wyższego poziomu i martwienie się o szczegóły niskiego poziomu.Powyższy post i odpowiedzi szybko stają się przestarzałe, ponieważ rozwój LXD nadal ulepsza LXC . Tak, wiem, że Docker też nie stał w miejscu.
LXD implementuje teraz repozytorium dla obrazów kontenerów LXC, z których użytkownik może pchać / wyciągać, aby przyczynić się do lub użyć ponownie.
Interfejs REST LXD dla LXC umożliwia teraz zarówno lokalne, jak i zdalne tworzenie / wdrażanie / zarządzanie kontenerami LXC przy użyciu bardzo prostej składni poleceń.
Kluczowe cechy LXD to:
Dostępna jest teraz wtyczka NCLXD dla OpenStack umożliwiająca OpenStack wykorzystywać LXD do wdrażania / zarządzania kontenerami wirtualnymi w OpenStack zamiast używania KVM, vmware itp.
Jednak NCLXD umożliwia także chmurę hybrydową mieszanki tradycyjnych maszyn wirtualnych HW i maszyn wirtualnych LXC.
Wtyczka OpenStack nclxd lista obsługiwanych funkcji obejmuje:
Do czasu wydania Ubuntu 16.04 w kwietniu 2016 r. Pojawią się dodatkowe fajne funkcje, takie jak obsługa urządzeń blokowych, obsługa migracji na żywo .
źródło
Dokery używają obrazów składających się z warstw. Dodaje to wiele pod względem przenośności, udostępniania, wersjonowania i innych funkcji. Obrazy te są bardzo łatwe do przenoszenia lub przesyłania, a ponieważ są w warstwach, zmiany w kolejnych wersjach są dodawane w postaci warstw w stosunku do poprzednich warstw. Podczas wielokrotnego przenoszenia nie trzeba przenosić warstw podstawowych. Dokery mają kontenery, które uruchamiają te obrazy ze środowiskiem wykonawczym, dodają zmiany jako nowe warstwy, zapewniając łatwą kontrolę wersji.
Poza tym Docker Hub to dobry rejestr z tysiącami publicznych obrazów, w których można znaleźć obrazy z zainstalowanym systemem operacyjnym i innym oprogramowaniem. Dzięki temu możesz uzyskać całkiem dobry początek swojej aplikacji.
źródło
Chcąc zachować ten bardziej szczegółowy, jest to już zadane i udzielone powyżej .
Cofam się jednak i odpowiadam nieco inaczej, sam silnik dokera dodaje orkiestrację jako jeden z jego dodatków i jest to część zakłócająca. Gdy zaczniesz uruchamiać aplikację jako kombinację kontenerów działających „gdzieś” w wielu silnikach kontenerów, staje się to naprawdę ekscytujące. Solidność, poziome skalowanie, pełna abstrakcja od podstawowego sprzętu, mógłbym kontynuować ...
To nie tylko Docker, który ci to daje, w rzeczywistości de facto standardem zarzadzania kontenerami jest Kubernetes, który ma wiele smaków, Docker, ale także OpenShift, SuSe, Azure, AWS ...
Następnie pod K8S znajdują się alternatywne silniki kontenerowe; interesującymi są Docker i CRIO - niedawno zbudowany, pozbawiony demonów, przeznaczony jako silnik kontenerowy specjalnie dla Kubernetes, ale niedojrzały. Sądzę, że konkurencja między nimi będzie długoterminowym wyborem dla silnika kontenerowego.
źródło