Docker

menu icon

Docker

Docker to platforma Open Source służąca do tworzenia i wdrażania aplikacji kontenerowych oraz zarządzania nimi. Dowiedz się więcej o kontenerach, różnicach między nimi i maszynami wirtualnymi oraz przyczynach tak wielkiej popularności platformy Docker.

Czym jest Docker?

Docker to platforma konteneryzacji typu Open Source. Umożliwia programistom pakowanie aplikacji w kontenery — standardowe wykonywalne komponenty łączące kod źródłowy aplikacji z zależnościami i bibliotekami systemu operacyjnego wymaganymi do uruchomienia tego kodu w dowolnym środowisku. Kontenery upraszczają dostarczanie rozproszonych aplikacji i stają się coraz popularniejsze w miarę jak organizacje coraz częściej tworzą rozwiązania z myślą o chmurze i wykorzystują hybrydowe środowiska wielochmurowe.

Programiści mogą tworzyć kontenery bez użycia platformy Docker, ale dzięki niej tworzenie i wdrażanie kontenerów oraz zarządzanie nimi jest łatwiejsze, prostsze i bezpieczniejsze. Platforma Docker to zasadniczo zestaw narzędzi, który umożliwia programistom tworzenie, wdrażanie, uruchamianie, aktualizowanie i zatrzymywanie kontenerów przy użyciu prostych komend oraz automatyzowanie pracy za pomocą jednego interfejsu API.

Nazwa Docker jest używana również w odniesieniu do firmy Docker, Inc. (odsyłacz prowadzi poza serwis IBM), która sprzedaje komercyjną wersję platformy Docker, a także do projektu Open Source Docker (odsyłacz prowadzi poza serwis IBM) współtworzonego przez firmę Docker, Inc. oraz wiele innych organizacji i osób.

Jak działają kontenery i dlaczego są tak popularne

Używanie kontenerów jest możliwe dzięki funkcjom izolowania procesów i wirtualizacji wbudowanym w jądro systemu Linux. Te funkcje — np. grupy kontroli (cgroups) służące do przydzielania zasobów do procesów oraz przestrzenie nazw służące do ograniczania dostępu procesów do innych zasobów lub obszarów systemu albo wglądu w te zasoby lub obszary — pozwalają wielu komponentom aplikacji na współużytkowanie zasobów jednej instancji systemu operacyjnego hosta w sposób podobny do tego, w jaki hiperwizor pozwala wielu maszynom wirtualnym na współużytkowanie procesora, pamięci i innych zasobów pojedynczego serwera sprzętowego.

Dzięki temu technologia kontenerów oferuje wszystkie funkcje i korzyści maszyn wirtualnych — w tym izolację aplikacji, ekonomiczną skalowalność i możliwość likwidacji — a także ma inne, dodatkowe zalety:

  • Lekkość: w przeciwieństwie do maszyn wirtualnych kontenery nie obejmują ładunku całej instancji systemu operacyjnego i hiperwizora. Zawierają tylko procesy systemu operacyjnego i zależności niezbędne do wykonania kodu. Kontenery mają wielkość wyrażaną w megabajtach (a w przypadku niektórych maszyn wirtualnych są to gigabajty), lepiej wykorzystują moc obliczeniową sprzętu i szybciej się uruchamiają.
  • Większa efektywność wykorzystania zasobów: w przypadku kontenerów można uruchomić kilka razy więcej kopii aplikacji na tym samym sprzęcie w porównaniu do maszyn wirtualnych. Może to obniżyć wydatki związane z chmurą.
  • Większa produktywność programistów: kontenery można wdrażać, udostępniać i restartować szybciej i łatwiej niż maszyny wirtualne. Dzięki temu idealnie nadają się do użycia w potokach ciągłej integracji i ciągłego dostarczania (CI/CD), a także lepiej sprawdzają się w zespołach programistycznych stosujących praktyki zwinne oraz tworzenia i eksploatacji oprogramowania.

Firmy korzystające z kontenerów zgłaszają również inne korzyści, w tym wyższą jakość aplikacji i szybszą reakcję na zmiany rynkowe. Dowiedz się więcej z pomocą tego interaktywnego narzędzia:

Pobierz pełny raport: Kontenery w przedsiębiorstwie (PDF, 1,4 MB)

Dlaczego warto używać platformy Docker?

Platforma Docker jest obecnie tak popularna, że słowa „Docker” i „kontenery” są używane zamiennie. Jednak pierwsze technologie związane z kontenerami były dostępne od wielu lat — a nawet dekad (odsyłacz prowadzi poza serwis IBM) — jeszcze przed rokiem 2013, w którym opublikowano platformę Docker.

W szczególności w 2008 roku w jądrze systemu Linux zaimplementowano metodę LinuXContainers (LXC), która w pełni umożliwia wirtualizację pojedynczej instancji systemu Linux. Metoda LXC jest nadal używana, ale są też dostępne nowsze technologie korzystające z jądra systemu Linux. Ubuntu, nowoczesny system operacyjny Linux Open Source, również zapewnia tę możliwość.

Platforma Docker rozszerzyła rodzime funkcje konteneryzacji systemu Linux przy użyciu technologii dających następujące możliwości:

  • Lepsza, bezproblemowa przenośność: kontenery LXC często odwołują się do konfiguracji specyficznych dla maszyny, natomiast kontenery Docker działają bez modyfikacji w każdym środowisku komputera PC, centrum przetwarzania danych i chmury.
  • Jeszcze lżejsze aktualizacje na bardziej szczegółowym poziomie: w przypadku metody LXC można łączyć wiele procesów w jednym kontenerze. W kontenerze Docker może działać tylko jeden proces. Pozwala to utworzyć aplikację, która będzie dalej działać, gdy jedna z jej części zostanie wyłączona w celu przeprowadzenia aktualizacji lub naprawy.
  • Zautomatyzowane tworzenie kontenerów: platforma Docker może automatycznie stworzyć kontener na podstawie kodu źródłowego aplikacji.
  • Kontrola wersji kontenerów: platforma Docker może śledzić wersje obrazu kontenera, przywracać poprzednie wersje oraz śledzić, kto utworzył daną wersję i w jaki sposób. Może ona nawet przesyłać tylko różnice między istniejącą i nową wersją.
  • Ponowne wykorzystywanie kontenerów: istniejące kontenery mogą być używane jako obrazy podstawowe — zasadniczo szablony do tworzenia nowych kontenerów.
  • Współużytkowane biblioteki kontenerów: programiści mogą uzyskiwać dostęp do rejestru Open Source zawierającego tysiące kontenerów przesłanych przez użytkowników.

Obecnie konteneryzacja Docker działa również na serwerach z systemem Microsoft Windows. Ponadto większość dostawców chmury oferuje konkretne usługi pomagające programistom tworzyć, dostarczać i uruchamiać aplikacje kontenerowe za pomocą platformy Docker.

Z tych powodów nastąpiła błyskawiczna adopcja platformy Docker i ten trend nadal się utrzymuje. W momencie pisania tego artykułu, według danych firmy Docker Inc., z platformy korzysta 11 milionów deweloperów, a obrazy kontenerów są pobierane 13 miliardów razy miesięcznie (odsyłacz prowadzi poza serwis IBM).

Narzędzia i terminy związane z platformą Docker

Poniżej omówiono niektóre narzędzia i terminologię, które można napotkać podczas korzystania z platformy Docker:

DockerFile

Tworzenie każdego kontenera Docker zaczyna się od prostego pliku tekstowego zawierającego instrukcje budowania obrazu kontenera Docker. Plik DockerFile automatyzuje proces tworzenia obrazu Docker. Jest to w zasadzie lista instrukcji interfejsu wiersza komend (CLI), które mechanizm Docker Engine uruchomi w celu utworzenia obrazu.

Obrazy Docker

Obrazy Docker zawierają wykonywalny kod źródłowy aplikacji, a także wszystkie narzędzia, biblioteki i zależności, których kod aplikacji wymaga do uruchomienia jako kontener. Po uruchomieniu obraz Docker staje się jedną instancją (lub wieloma instancjami) kontenera.

Chociaż obraz Docker można utworzyć od podstaw, większość programistów ściąga je ze wspólnych repozytoriów. Z jednego obrazu podstawowego można utworzyć wiele obrazów Docker i będą one miały wspólny stos.

Obrazy Docker składają się z warstw, a każda warstwa odpowiada wersji obrazu. Za każdym razem, gdy programista wprowadzi zmiany w obrazie, zostanie utworzona nowa górna warstwa, która zastąpi dotychczasową górną warstwę i stanie się bieżącą wersją obrazu. Wcześniejsze warstwy są zapisywane na potrzeby wycofywania zmian lub do ponownego wykorzystania w innych projektach.

Za każdym razem, gdy kontener jest tworzony na podstawie obrazu Docker, tworzona jest także kolejna nowa warstwa nazywana warstwą kontenera. Zmiany wprowadzone w kontenerze, np. dodanie lub usunięcie plików, są zapisywane tylko w warstwie kontenera i obowiązują tylko w trakcie działania kontenera. Ten iteracyjny proces tworzenia obrazów zwiększa ogólną efektywność, ponieważ przy użyciu jednego obrazu podstawowego można uruchomić wiele aktywnych instancji kontenerów, które będą korzystać ze wspólnego stosu.

Kontenery Docker

Kontenery Docker to aktywne, działające instancje obrazów Docker. Obrazy Docker są plikami tylko do odczytu, natomiast kontenery to aktywna, efemeryczna i wykonywalna treść. Użytkownicy mogą z nich korzystać, a administratorzy — dostosowywać ich ustawienia i warunki za pomocą komend Docker.

Docker Hub

Docker Hub (odsyłacz prowadzi poza serwis IBM) to publiczne repozytorium obrazów Docker, które samo siebie uznaje za „największą na świecie bibliotekę i społeczność obrazów kontenerów”. Zawiera ono ponad 100 tys. obrazów kontenerów pochodzących od komercyjnych dostawców oprogramowania i indywidualnych programistów oraz z projektów Open Source. Można w nim znaleźć obrazy utworzone przez firmę Docker, Inc., certyfikowane obrazy należące do rejestru Docker Trusted Registry i tysiące innych obrazów.

Wszyscy użytkownicy repozytorium Docker Hub mogą w dowolnym momencie udostępnić swoje obrazy do współużytkowania. Mogą oni również pobierać predefiniowane obrazy podstawowe z systemu plików Docker w celu ich użycia jako punktu wyjścia dla dowolnego projektu konteneryzacji.

Docker daemon

Docker daemon to usługa działająca w systemie operacyjnym takim jak Microsoft Windows albo Apple MacOS lub iOS. Tworzy obrazy Docker i zarządza nimi przy użyciu komend pochodzących od klienta. Działa jako centrum sterowania implementacją Docker.

Rejestr Docker

Rejestr Docker jest skalowalnym systemem dystrybucji i pamięci masowej Open Source dla obrazów Docker. Rejestr umożliwia śledzenie wersji obrazów w repozytoriach, korzystając z tagowania na potrzeby identyfikacji. W tym celu jest używany system Git — narzędzie do kontroli wersji.

Wdrażanie i harmonizacja platformy Docker

Jeśli uruchamiasz tylko kilka kontenerów, aplikacją można dość łatwo zarządzać przy użyciu mechanizmu Docker Engine — środowiska wykonawczego będącego de facto standardem w branży. Jeśli jednak wdrożenie obejmuje tysiące kontenerów i setki usług, to zarządzanie takim przepływem pracy bez pomocy poniższych specjalistycznych narzędzi jest niemal niemożliwe.

Docker Compose

Jeśli tworzysz aplikację z procesów w wielu kontenerach, które znajdują się na tym samym hoście, do zarządzania architekturą aplikacji możesz użyć narzędzia Docker Compose. Narzędzie Docker Compose tworzy plik YAML określający usługi zawarte w aplikacji oraz może wdrażać i uruchamiać kontenery za pomocą jednej komendy. Przy użyciu narzędzia Docker Compose można również definiować trwałe woluminy na potrzeby pamięci masowej, określać węzły podstawowe oraz dokumentować i konfigurować zależności usług.

Kubernetes

Aby monitorować cykle życia kontenerów i zarządzać nimi w bardziej złożonych środowiskach, konieczne będzie zastosowanie narzędzia do orkiestracji kontenerów. Platforma Docker zawiera narzędzie do orkiestracji (Docker Swarm), jednak większość programistów wybiera zamiast niego platformę Kubernetes.

Kubernetes to platforma Open Source do orkiestracji kontenerów, która wywodzi się z projektu opracowanego do użytku wewnętrznego w firmie Google. Platforma Kubernetes planuje i automatyzuje zadania niezbędne do zarządzania architekturami opartymi na kontenerach, w tym wdrażanie kontenerów, aktualizacje, wykrywanie usług, udostępnianie pamięci masowej, równoważenie obciążeń, monitorowanie poprawności itp. Ponadto ekosystem Open Source obejmujący narzędzia dla platformy Kubernetes, w tym Istio i Knative, umożliwia organizacjom wdrożenie zapewniającej wysoką produktywność platformy w modelu usługowym (PaaS) na potrzeby aplikacji kontenerowych oraz szybszego wprowadzenia przetwarzania bezserwerowego.

Aby uzyskać więcej szczegółowych informacji o platformie Kubernetes, obejrzyj wideo „Kubernetes bez tajemnic”:

Kubernetes bez tajemnic (10:59)

Docker i IBM Cloud

Platforma kontenerów dla przedsiębiorstw zapewnia orkiestrację w obrębie wielu chmur publicznych i prywatnych na potrzeby ujednolicenia środowisk, aby poprawić wyniki biznesowe i zwiększyć wydajność operacyjną. Jest to kluczowy komponent otwartej strategii chmury hybrydowej, dzięki któremu można uniknąć uzależnienia od jednego dostawcy, spójnie tworzyć i uruchamiać obciążenia w dowolnym miejscu, a także optymalizować i modernizować całe środowisko IT.

Wykonaj kolejny krok:

  • Wdrażaj wysoce dostępne, w pełni zarządzane klastry Kubernetes z pomocą rozwiązania Red Hat OpenShift na platformie IBM Cloud, zarządzanej usługi OpenShift, która wykorzystuje korporacyjną skalę i bezpieczeństwo platformy IBM Cloud w celu automatyzacji aktualizacji, skalowania i udostępniania.
  • Wdrażaj i uruchamiaj aplikacje w środowiskach lokalnych, przetwarzania brzegowego i chmury publicznej od dowolnego dostawcy dzięki IBM Cloud Satellite, zarządzanemu rozwiązaniu do obsługi chmury rozproszonej.
  • Upraszczaj i konsoliduj jeziora danych, bezproblemowo wdrażając obsługującą kontenery korporacyjną pamięć masową w środowiskach lokalnych i chmury publicznej dzięki rozwiązaniom IBM do obsługi pamięci masowej chmury hybrydowej.
  • Upraszczaj zarządzanie złożonymi hybrydowymi środowiskami IT dzięki usługom zarządzanym IBM Cloud.

Załóż konto IBM Cloud już dzisiaj.