Co Docker dodaje do narzędzia LXC (userspace LXC tools)?

Jeśli przyjrzysz się funkcjom Dockera, większość z nich jest już dostarczana przez LXC.

Co dodaje Docker? Dlaczego miałbym używać Dockera zamiast zwykłego LXC?

 372
Author: Jacek Laskowski, 2013-08-01

5 answers

Z Docker FAQ :

Docker nie jest zamiennikiem lxc. "lxc" odnosi się do możliwości jądra Linuksa (w szczególności przestrzeni nazw i grup kontrolnych), które umożliwiają wzajemne piaskowanie procesów i kontrolowanie ich alokacji zasobów.

Oprócz tego niskopoziomowego fundamentu funkcji jądra, Docker oferuje narzędzie wysokiego poziomu z kilkoma potężnymi funkcjami:

  • przenośne rozmieszczenie na maszynach. Docker definiuje format łączenia aplikacji i wszystkich jej zależności w jeden obiekt, który może być przeniesiony na dowolną maszynę obsługującą docker i tam wykonany z gwarancją, że środowisko wykonawcze narażone na działanie aplikacji będzie takie samo. Lxc implementuje sandboxing procesowy, który jest ważnym warunkiem wstępnym wdrożenia przenośnego, ale to samo nie wystarcza do wdrożenia przenośnego. Jeśli wyślesz mi kopię swojej aplikacji zainstalowanej w niestandardowej konfiguracji lxc, to prawie na pewno nie działa na moim komputerze w sposób, w jaki działa na Twoim, ponieważ jest powiązany z konkretną konfiguracją twojego komputera: siecią, pamięcią masową,logowaniem, dystrybucją itp. Docker definiuje abstrakcję dla tych ustawień specyficznych dla maszyny, tak aby ten sam kontener Dockera mógł działać - bez zmian-na wielu różnych maszynach, z wieloma różnymi konfiguracjami.

  • Aplikacja-centric. Docker jest zoptymalizowany do wdrażania aplikacji, W przeciwieństwie do maszyny. Znajduje to odzwierciedlenie w jego API, interfejsie użytkownika, filozofii projektowania i dokumentacji. Natomiast Skrypty pomocnicze lxc koncentrują się na kontenerach jako lekkich maszynach - zasadniczo serwerach, które uruchamiają się szybciej i potrzebują mniej pamięci ram. Uważamy, że kontenery to coś więcej.

  • automatyczne budowanie . Docker zawiera narzędzie dla programistów do automatycznego montażu kontenera z ich kodu źródłowego, z pełną kontrolą nad zależnościami aplikacji, narzędzia do budowania, opakowania itp. Mogą one swobodnie używać pakietów make, maven, chef, Puppet, salt, debian, rpms, source tarballs lub dowolnej kombinacji powyższych, niezależnie od konfiguracji maszyn .

  • wersjonowanie. Docker zawiera funkcje podobne do Gita do śledzenia kolejnych wersji kontenera, sprawdzania różnic między wersjami, zatwierdzania nowych wersji, cofania itp. Historia zawiera również Jak kontener został zmontowany i przez kogo, dzięki temu uzyskujesz pełną identyfikowalność z serwera produkcyjnego aż do dewelopera. Docker implementuje również przyrostowe uploady i downloads, podobnie jak "git pull" , więc nowe wersje kontenera mogą być przesyłane tylko przez wysyłanie diffów.

  • ponowne wykorzystanie komponentów. każdy kontener może być używany jako "obraz bazowy" do tworzenia bardziej wyspecjalizowanych komponentów. Można to zrobić ręcznie lub w ramach zautomatyzowanego budowania. Na przykład możesz przygotować idealny python środowiska i używać go jako bazy dla 10 różnych aplikacji. Idealną konfigurację postgresql można ponownie wykorzystać we wszystkich przyszłych projektach. I tak dalej.

  • dzielenie się. Docker ma dostęp do publicznego rejestru ( https://registry.hub.docker.com / ), gdzie tysiące ludzi załadowało przydatne kontenery: wszystko, od redis, CouchDB, postgres, przez bramkarzy irc, przez serwery aplikacji rails, po hadoop, po obrazy bazowe dla różnych dystrybucji. W skład rejestru wchodzi również Urzędnik "biblioteka standardowa" użytecznych kontenerów utrzymywana przez zespół Dockera. Sam rejestr jest open-source, więc każdy może wdrożyć swój własny rejestr do przechowywania i przesyłania prywatnych kontenerów, na przykład do wewnętrznych wdrożeń serwerów.

  • ekosystem narzędzi. Docker definiuje API do automatyzacji i dostosowywania tworzenia i wdrażania kontenerów. Istnieje ogromna liczba narzędzi integrujących się z Dockerem w celu rozszerzenia jego możliwości. Deployment podobny do PaaS (Dokku, Deis, Flynn), orkiestracja wielu węzłów (maestro, salt, mesos, openstack nova), pulpity zarządzania (Docker-ui, OpenStack horizon, shipyard), zarządzanie konfiguracją (chef, puppet), ciągła integracja (jenkins, strider, travis) itp. Docker szybko stał się standardem oprzyrządowania opartego na kontenerach.

Mam nadzieję, że to pomoże!

 528
Author: Solomon Hykes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-23 18:59:27

Rzućmy okiem na listę technicznych funkcji Dockera i sprawdźmy, które z nich są dostarczane przez LXC, a które nie.

Cechy:

1) Filesystem isolation: każdy kontener procesu działa w całkowicie oddzielnym głównym systemie plików.

Zaopatrzony w zwykły LXC.

2) Resource isolation: zasoby systemowe, takie jak procesor i pamięć, mogą być przydzielane w różny sposób do każdego kontenera procesu, przy użyciu cgroups.

Zaopatrzony w zwykły LXC.

3) Network isolation: każdy kontener procesu działa w swojej własnej przestrzeni nazw sieci, z wirtualnym interfejsem i własnym adresem IP.

Zaopatrzony w zwykły LXC.

4) Copy-on-write: root filesystems są tworzone przy użyciu copy-on-write, co sprawia, że wdrażanie jest niezwykle szybkie, tanie w pamięci i tanie w dyskach.

Jest to dostarczane przez aufs, unijny system plików, który Docker to zależy. Możesz samodzielnie skonfigurować AUFS za pomocą LXC, ale Docker używa go jako standardu.

5) Logging : standardowe strumienie (stdout/stderr/stdin) każdego kontenera procesowego są gromadzone i rejestrowane w czasie rzeczywistym lub w trybie wsadowym.

Docker to zapewnia.

6) Zarządzanie zmianami : zmiany w systemie plików kontenera mogą być przypisane do nowego obrazu i ponownie wykorzystane do utworzenia większej liczby kontenerów. Brak szablonów lub instrukcji wymagana konfiguracja.

"template or manual configuration" jest odniesieniem do LXC, gdzie musisz dowiedzieć się o obu tych rzeczach. Docker pozwala traktować kontenery w taki sposób, w jaki traktujesz maszyny wirtualne, bez uczenia się o konfiguracji LXC.

7) Interactive shell: docker może przydzielić pseudo-tty i dołączyć do standardowego wejścia dowolnego kontenera, na przykład do uruchomienia throwaway interactive shell.

LXC już to zapewnia.


Dopiero zacząłem się uczyć o LXC i Dockerze, więc chętnie poprawię lub poprawię odpowiedzi.

 66
Author: Flimm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-01 08:50:42

Powyższy post i odpowiedzi szybko stają się przestarzałe, ponieważ rozwój LXD nadal wzmacnia LXC. Tak, Wiem, że Docker też nie stał w miejscu.

LXD implementuje teraz repozytorium dla obrazów kontenerów LXC, które użytkownik może wypychać/ściągać, aby przyczynić się do lub ponownie użyć.

REST api LXD do 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 są:

  • Secure by design (nieuprzywilejowane kontenery, ograniczenia zasobów i dużo więcej)
  • skalowalne (od pojemników na laptopie do tysięcy komputerów węzły)
  • intuicyjny (proste, przejrzyste API i wyraźne doświadczenie wiersza poleceń)
  • Image based (koniec z szablonami dystrybucji, tylko dobre, zaufane images) Live migration

Istnieje wtyczka NCLXD dla OpenStack pozwalająca OpenStack używać LXD do wdrażania / zarządzania kontenerami LXC jako maszyny wirtualne w OpenStack zamiast używać KVM, vmware itp.

Jednak NCLXD umożliwia również chmurę hybrydową złożoną z kombinacji tradycyjnych maszyn wirtualnych sprzętowych i maszyn wirtualnych LXC.

Wtyczka OpenStack nclxd lista obsługiwanych funkcji to:

stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support

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.

 12
Author: bmullan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-19 14:35:01

Dockery używają obrazów zbudowanych w warstwach. To dodaje wiele pod względem przenośności, udostępniania, wersjonowania i innych funkcji. Obrazy te są bardzo łatwe do przenoszenia lub przenoszenia, a ponieważ są w warstwach, zmiany w kolejnych wersjach są dodawane w postaci warstw nad poprzednimi warstwami. Tak więc, podczas przenoszenia wiele razy nie trzeba portować warstw bazowych. Dockery mają kontenery, które uruchamiają te obrazy z zawartym środowiskiem wykonawczym, dodają zmiany jako nowe warstwy, zapewniając łatwe Kontrola wersji.

Poza tym Docker Hub to dobry rejestr z tysiącami publicznych obrazów, gdzie można znaleźć obrazy, które mają zainstalowany system operacyjny i inne oprogramowanie. Możesz więc uzyskać całkiem dobrą przewagę nad swoją aplikacją.

 3
Author: div,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-29 08:07:44

Aby zachować ten pither, to jest już zadane i Odpowiedzi powyżej.

Cofnąłbym się jednak i odpowiedziałbym nieco inaczej, sam silnik Dockera dodaje orkiestrację jako jeden ze swoich dodatków i to jest część uciążliwa. Po uruchomieniu aplikacji jako kombinacji kontenerów działających "gdzieś" w wielu silnikach kontenerów staje się to naprawdę ekscytujące. Solidność, skalowanie poziome, kompletna abstrakcja z podstawowego sprzętu, mógłbym iść dalej i on..

To nie tylko Docker, który daje Ci to, w rzeczywistości standardem orkiestracji kontenerów jest Kubernetes, który występuje w wielu smakach, Docker, ale także OpenShift, SuSe, Azure, AWS...

Następnie pod K8S są alternatywne silniki kontenerowe; ciekawe są Docker i CRIO - niedawno zbudowany, bez Demon, przeznaczony jako silnik kontenerowy specjalnie dla Kubernetes, ale niedojrzały. To konkurencja między nimi, że myślę, że będzie naprawdę długo wybór terminu dla silnika kontenerowego.

 0
Author: Will Rothwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-29 09:16:52