Wyślij zapytanie Dołącz do Sii

Docker to obecnie niezbędne narzędzie dla większości programistów. Według badań Stack Overflow, Docker jest technologią, której znajomość jest najbardziej pożądana przez programistów.

Znajomość Dockera przydaje się w wielu rozwiązaniach chmurowych m.in.

  • Kubernetes,
  • Azure App Services,
  • Amazon Elastic Container Service.
Najbardziej pożądane technologie zdaniem programistów - Docker na 1. miejscu
Ryc. 1 Najbardziej pożądane technologie zdaniem programistów

Docker – czym jest i w jaki sposób mogą go wykorzystać programiści?

Aby móc wykorzystać potencjał narzędzia, warto je dobrze poznać. Odpowiedzmy sobie najpierw na pytanie czym właściwie jest Docker, kontener i obrazy, używane przez kontenery.

Docker jest obecnie jednym z kilku narzędzi, które uruchamiają kontenery. Inne narzędzia o tej samej funkcji to np. Containerd lub CRI-O. Dzięki kontenerom możemy aktywować dodatkowy, odizolowany system operacyjny z gotową do działania aplikacją. Kontener nie emuluje całej warstwy sprzętowej – dzięki niemu otrzymujemy pełnoprawny system operacyjny wraz ze zdefiniowanym procesem aplikacji. Nie zużywa też takiej ilości zasobów, co wirtualizacja.

Kontenery Dockera działają niezależnie od siebie i do chwili, w której świadomie wskażemy zależność pomiędzy nimi, nic o sobie nie wiedzą. Jeśli, przykładowo, chcemy uruchomić bazę danych dla naszej aplikacji, to istnieje taka możliwość. Polega ona na uruchomieniu kolejnego kontenera z bazą i stworzeniu połączenia sieciowego pomiędzy kontenerami.

W dokumentacji Dockera często wymieniane jest określenie „container image”. Podkreśla ono zależność – kontener powstaje na podstawie obrazu.

Obraz kontenera to lekki, samodzielny, wykonywalny pakiet oprogramowania, który zawiera wszystko, co jest potrzebne do uruchomienia aplikacji:

  • kod,
  • środowisko wykonawcze,
  • narzędzia systemowe,
  • biblioteki systemowe,
  • ustawienia.

Uruchamianie i budowanie kontenerów

Poniżej przedstawię kilka przykładowych poleceń, które uruchamiają i budują kontenery. W kolejnych artykułach je rozwinę.

Uruchamianie kontenera:

  • Uruchomienie ubuntu z powłoką bash
docker run -it ubuntu:22.04 bash
  • Uruchomienie centos z powłoką bash
docker run -it centos:centos8.4.2105 bash

Uruchomienie kontenera polega na wskazaniu obrazu, na podstawie którego ma działać, i podaniu opcjonalnej konfiguracji. Powyższe polecenia uruchamiają systemy operacyjne w wybranej wersji. Wywołanie powłoki bash uruchamia proces o tej nazwie w kontenerze i umożliwia wykonywanie w nim poleceń.

Budowanie obrazu kontenera

  • Zawartość pliku Dockerfile
FROM tomcat:8.0
ADD https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war /usr/local/tomcat/webapps/
  • Budowanie obrazu
docker build -t sample-app-tomcat-1.0.0 .
  • Uruchomienie lokalnego obrazu z udostępnieniem portu 8080
docker run -p 8080:8080 sample-app-tomcat-1.0.0:latest

Budowanie obrazu to zapisanie stanu kontenera w formie pliku. W podanym przykładzie, na podstawie bazowego obrazu Tomcat, powstaje obraz z przykładową aplikacją sample.war. W ten sposób otrzymujemy obraz gotowy do uruchomienia z powtarzalną konfiguracją, wskazanymi wersjami oprogramowania – gotowy do działania.

Współdzielenie obrazu kontenera

Aby współdzielić obraz i móc uruchomić go na kolejnych środowiskach, mamy dwie możliwości:

  • zapisanie obrazu w postaci pliku tarball,
  • zapisanie obrazu w publicznym lub prywatnym rejestrze obrazów.

Pierwszy sposób wykorzystuje się, kiedy docelowe środowiska nie mają dostępu do internetu. Natomiast najpowszechniejszym sposobem jest wykorzystanie rejestru.

Do publicznego rejestru każdy może dodawać obrazy – co jest jednocześnie jego zaletą i wadą. Dostępne, oficjalne obrazy budowane przez opiekunów oraz twórców konkretnych rozwiązań, są bezpieczniejsze od obrazów utworzonych przez prywatne osoby.

Jakie są korzyści wykorzystania Dockera dla programistów?

Konteneryzacja dla programisty oznacza sposób, w jaki może dostarczyć aplikację ze wszystkimi potrzebnymi zależnościami i wybranym systemem operacyjnym. Co ważne, może zrobić to w określonych przez niego wersjach, dzięki czemu uruchomienie aplikacji na kolejnych środowiskach (włączając produkcyjne) jest bardziej przewidywalne.

Przykładowo: jeśli uruchamiamy aplikację Java na Apache Tomcat, to obraz kontenera zawiera zainstalowany system operacyjny (np. Ubuntu lub CentOS), zainstalowaną maszynę Java oraz Apache Tomcat i paczkę WAR z aplikacją. Jedynym uruchomionym procesem staje się wówczas wirtualna maszyna Javy z Tomcatem i naszą aplikacją.

Docker pozwala wykorzystywać gotowe obrazy zainstalowanych systemów, aplikacji i baz danych, które zostały wcześniej przygotowane i umieszczone w publicznym rejestrze. Dzięki temu, jeśli chcemy używać PostgreSQL, Redis, RubyOnRails albo Wildfly, jest duża szansa na to, że gotowy obraz będziemy mogli pobrać z repozytorium i nie stracimy czasu na jego przygotowanie.

Jeśli jednak nie znajdziemy tego, czego szukamy, to zawsze możemy zbudować własny obraz, bazując na jednym z bardziej generycznych, zawierających tylko zainstalowany system operacyjny (Ubuntu, Fedora, Alpine itp…) lub zainstalowane środowisko uruchomieniowe (Java, Python czy ASP.NET).

Wykorzystując kontenery zyskujemy:

  • Łatwość tworzenia oraz powtarzalność środowisk deweloperskich.
  • Uproszczenie procesów dostarczania gotowych aplikacji na docelowe środowiska w szczególności rozproszone.
  • Uruchamianie na Windows, Linux, macOS, Kubernetes.
  • Możliwość eksperymentowania z różnymi wersjami oprogramowania.

Kilka słów podsumowania

Widać wyraźnie, że środowisko deweloperskie można zbudować z gotowych obrazów zawierających zainstalowane kontenery i usługi. Mechanizm budowania obrazów kontenerów możemy wykorzystać także w drugą stronę i dostarczać nasze konkretne aplikacje w postaci obrazów. Bez względu na technologię wykorzystaną w aplikacji, obraz kontenera będzie dostarczany w identyczny sposób, co upraszcza procedury instalacyjne.

Proces dostarczania aplikacji może zostać zautomatyzowany przez odpowiednie narzędzia.

Kontenery były od samego początku wspierane przez systemy Linux, jednak obecnie są dostępne również na Windows.
Windows Subsystem dla Linux (WSL 2) wprowadził istotną zmianę – pozwala uruchamiać kontenery Linuxa natywnie, bez wirtualizacji.
W przypadku macOS niestety potrzebna jest dodatkowa wirtualizacja.

W następnych wpisach postaram się opisać tworzenie obrazów Dockera oraz budowanie środowiska deweloperskiego.

Ocena:
Autor
Avatar
Dawid Szulist

Obecnie pracuje na stanowisku DevOps Engineer. Ma doświadczenie jako programista, administrator i lider. Odpowiada za tworzenie nowej infrastruktury opartej o RedHat OpenShift i Azure. Fan wszechobecnej automatyzacji, rozwiązań GitOps i Get Thing Done. Motywuje go dzielenie się wiedzą z innymi. Cechuje go spokój, szczególnie w trakcie sytuacji kryzysowych :) Prywatnie mąż, ojciec dwójki dzieci. Interesuje się kalisteniką i jest początkującym biegaczem :)

Komentarze

Twój adres e-mail nie zostanie opublikowany.

Może Cię również zainteresować

Pokaż więcej postów

Bądź na bieżąco

Zapisz się do naszego newslettera i otrzymuj najświeższe informacje ze świata Sii.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Get an offer

Natalia Competency Center Director

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

APLIKUJ APLIKUJ

Join Sii

Paweł Process Owner

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?