Narodziny Dockera
Docker został zaprezentowany światu po raz pierwszy w 2013 roku, w bardzo skromnej oprawie, bez wcześniejszego uprzedzenia. Podczas pięciominutowej prezentacji na konferencji Python Developers Conference, Solomon Hykes, założyciel firmy dotCloud wygłosił prezenetację pt. „The future of Linux containers”, która zapoczątkowała narodziny Dockera. Orginalną prezentację można obejrzeć tutaj:
Od tego momentu, w ciągu kilku lat, Docker ewoluował zgodnie z potrzebami użytkowników i klientów, którzy napędzali jego rozwój. Z czasem zaczęto kłaść nacisk na kwestie w zakresie bezpieczeństwa, orchestracji, sieci oraz innych aspektów wymaganych przez rynek. W ciągu kilku lat Dockera używają miliony użytkowników oraz setki klientów komercyjnych, którzy dzięki Dockerowi skalują swoje produkty i usługi.
Power of Docker – kontener
Docker wprowadza izolację pomiędzy warstwa aplikacji a infrastrukturą poprzez swój przenośny format jakim jest kontener. Dzięki temu, jesteśmy w stanie uruchomić wiele kontenerów na jednym hoście. Kontenery nie potrzebują tak dużej ilości zasobów w porównaniu do maszyn wirtualnych, ponieważ działają bezpośrednio na jądrze systemu hosta. Nie wchodząc w szczegóły, kontenery współdzielą ze sobą zasoby sprzętowe, min. pamięć operacyjną czy czas procesora. W przypadku uruchamiania maszyn wirtualnych, musimy z góry przypisać im poszczególne zasoby.
Oznacza to, że możemy uruchomić o wiele więcej kontenerów w stosunku do ilości maszyn wirtualnych, które pochłonełyby więcej zasobów sprzętowych.
Wszystkie kontenery Dockera są izolowane nie tylko od bazowego systemu operacyjnego, ale również od siebie samych.
Środowiska developerskie
Docker to narzędzie, które ma za zadanie uprościć tworzenie łatwego do dystrybucji artefaktu dowolnej aplikacji, wdrażanie go na dużą skalę w dowolnym środowisku oraz usprawnianie przepływu pracy i zwiększanie szybkości reagowania na zmiany w organizacjach pracujących nad oprogramowaniem
Docker wspomaga proces wytwarzania oprogramowania, które staje się mniej problematyczny poprzez ustandaryzowane środowiska korzystające z lokalnych kontenerów.
Kontenery mogą być uruchamiane na lokalnym laptopie programisty, a następnie wdrażane na fizycznych lub wirtualnych maszynach, w chmurze publicznej lub prywatnej. Przenośność i lekkość Dockera ułatwiają także dynamiczne zarządzanie obciążeniami, skalowanie lub usuwanie aplikacji i usług w zależności od potrzeb biznesowych, w czasie zbliżonym do rzeczywistego.
Zmieniam projekt, muszę postawić środowisko na nowo
Gdy developerzy biorą udział w wielu różnych projektach, z reguły korzystając z jednego komputera do pracy. Dzięki Dockerowi, nie muszą już instalować kilku silników bazodanowych czy usług w momencie zmiany projektu. Są w stanie uruchomić bazę danych i/lub usługę z kontenera a następnie połączyć to z aplikacją, nad która obecnie pracują.
Często również niepotrzebne jest instalowanie oprogramowania. Wszystko dlatego, że można znaleźć w repozytorium obrazy zainstalowanych systemów, baz danych czy aplikacji.
Docker a architektura mikroserwisowa
Obecnie wszechobecny jest trend architektury mikroserwisowej. Mimo, że sama idea powstała niezależnie od Dockera, to głównie dzięki Dockerowi, stała się jeszcze bardziej popularna i częściej stosowana. Jednym z konceptów architektury mikroserwisowej jest możliwość ich implementacji w różnych technologiach, które mogą wykorzystywać różne infrastruktury. Z pomocą przychodzi Docker, który daje możliwość spakowania artefaktów oraz zależności każdego mikroserwisu w pojedynczą, niezależną od siebie paczkę.
Dostarczanie aplikacji
Docker ułatwia konieczność aktualizowania systemu operacyjnego i innych elementów, które zmieniają się w zależności od środowiska. Docker pozwala na zapisanie systemu operacyjnego w obrazie (docker image). Dzięki czemu, można go łatwo przenieść na inną maszynę z Dockerem.
Następnie programista jest w stanie łatwo przygotować paczkę produkcyjną, którą może wdrożyć samodzielnie lub przekazać ją administratorowi, który z kolei nie musi się zastanawiać w jakiej technologii aplikacja została stworzona oraz nie musi przygotowywać środowiska uruchomieniowego specyficznego dla danej technologii.