← Wszystkie pytania
Co to jest Docker i jak działa?
CzęstoPoczątkującyDevOps

Co to jest Docker i jak działa?

Krótka odpowiedź
Docker to otwarta platforma do pakowania i uruchamiania aplikacji w postaci kontenerów: izolowane procesy współdzielące jądro Linuksa hosta (poprzez przestrzenie nazw i grupy c) zamiast potrzebować pełnej maszyny wirtualnej. Wykorzystuje model klient-serwer: Klient docker wysyła polecenia poprzez REST API do demona dockerd, który buduje obrazy i uruchamia z nich kontenery.

Dlaczego istnieje. Docker umożliwia spakowanie aplikacji ze wszystkimi jej zależnościami (biblioteki, konfiguracja, środowisko wykonawcze) w jeden artefakt — obraz — i uruchomienie go w identyczny sposób na laptopie programisty, w CI i w środowisku produkcyjnym. To rozwiązuje klasyczny problem „działa na moim komputerze”.

Kontenery a maszyny wirtualne. Maszyna wirtualna wirtualizuje sprzęt i dostarcza cały system operacyjny gościa z własnym jądrem. Kontener to izolowany proces korzystający z jądra hosta. W rezultacie kontenery są lżejsze, uruchamiają się w ułamkach sekundy i zużywają mniej zasobów. Ale kontener nie jest lekką maszyną wirtualną: jest powiązany z jądrem hosta, a jego granica izolacji jest słabsza niż granica maszyny wirtualnej. Maszyna wirtualna ma izolację wymuszoną sprzętowo, podczas gdy luka we współdzielonym jądrze może potencjalnie zostać usunięta z kontenera — to kompromis w zakresie szybkości i gęstości. Host musi odpowiadać typowi kontenera: kontenery systemu Linux wymagają jądra systemu Linux, kontenery systemu Windows wymagają jądra systemu Windows. W systemach macOS i Windows Docker Desktop w przezroczysty sposób uruchamia małą maszynę wirtualną z systemem Linux (np. poprzez WSL2), więc znajdujące się tam kontenery systemu Linux współdzielą jądro tej maszyny wirtualnej, a nie jądro systemu operacyjnego.

Architektura (klient-serwer). Według dokumentacji Dockera:

  • Klient docker to podstawowy sposób interakcji użytkowników z Dockerem; polecenia takie jak docker run są wysyłane do demona.
  • Demon dockerd „wykonuje najcięższe zadania” związane z budowaniem, uruchamianiem i dystrybucją kontenerów oraz zarządza obiektami, takimi jak obrazy, kontenery, sieci i woluminy.
  • Klient komunikuje się z demonem za pośrednictwem REST API poprzez gniazdo UNIX lub interfejs sieciowy, dzięki czemu mogą działać na różnych komputerach.
  • Rejestr przechowuje obrazy; domyślny publiczny to Docker Hub.

Obrazy i kontenery. Przydatna analogia: obraz jest jak klasa (lub program na dysku), a kontener jest jej instancją (działającym procesem); możesz uruchomić wiele kontenerów z jednego obrazu.

  • Obraz to szablon tylko do odczytu zawierający instrukcje dotyczące tworzenia kontenera zbudowanego z warstw. Jest zdefiniowany przez Dockerfile; kiedy to zmienisz, odbudowane zostaną tylko zmienione warstwy.
  • Kontener to uruchamialna instancja obrazu. Na wierzchu warstw obrazu tylko do odczytu dodaje cienką warstwę zapisywalną (kopiowanie przy zapisie); wszystko, co jest tam zapisane, zostanie utracone po usunięciu kontenera — właśnie dlatego trwałe dane wymagają woluminów.

Jak działa izolacja (pod maską). dockerd nie wywołuje bezpośrednio jądra — deleguje zarządzanie cyklem życia kontenera do containerd, który wywołuje środowisko wykonawcze OCI; w Dockerze domyślnie jest to runc, ale środowisko wykonawcze można podłączyć (crun, gVisor, Kata itp.). Rzeczywista izolacja wynika z funkcji jądra Linuksa:

  • przestrzenie nazw izolują zasoby (na stronie man7 dostępnych jest 8 typów: PID, sieć, montowanie, UTS, IPC, użytkownik, cgroup, czas). Proces „widzi” tylko swoje własne PID, swój własny stos sieciowy i tak dalej.
  • cgroups (grupy kontrolne) ograniczają i uwzględniają wykorzystanie zasobów (procesor, pamięć, wejścia/wyjścia).

Częste działania następcze. Warstwy obrazu są buforowane; docker compose obsługuje aplikacje wielokontenerowe; dane są utrwalane poprzez woluminy (domyślnie kontener jest tymczasowy); a OCI standaryzuje format obrazu (specyfikacja obrazu), środowisko wykonawcze (specyfikacja środowiska wykonawczego) i protokół dystrybucji rejestru (specyfikacja dystrybucji) — te trzy specyfikacje zapewniają interoperacyjność ekosystemu.

DockerKontenery

Pobierz teraz i wypróbuj za darmo przy swoich zadaniach!

Pobierz dla Windows
10 15 darmowych kredytów • Karta kredytowa nie jest wymaganaWersja: Ładowanie…

Bez instalacji - pobierz i uruchom. Bez rejestracji - zaloguj się przez Google.