Docker dla programistów - szybki start w 30 minut

Docker dla programistów - szybki start w 30 minut
Autor Adam Pawlak
Adam Pawlak19.09.2023 | 6 min.

Docker zyskuje coraz większą popularność wśród programistów, ponieważ umożliwia szybkie tworzenie izolowanych środowisk do budowy, testowania i wdrażania aplikacji. Dzięki kontenerom możliwe jest znaczne przyspieszenie procesu developmentu i eliminacja problemów związanych ze zgodnością między środowiskami programistycznymi. W tym artykule omówimy kluczowe zagadnienia związane z Dockerem, aby w krótkim czasie móc rozpocząć efektywną pracę z tą technologią.

Podstawy Dockera

Docker wykorzystuje kontenery do izolacji środowisk. Kontener zawiera aplikację oraz wszystkie zależności potrzebne do jej uruchomienia. Dzięki temu możliwe jest uruchomienie kontenera na różnych systemach bez konieczności instalowania dodatkowych bibliotek. Kontenery wykorzystują zasoby systemu operacyjnego, ale są od siebie odizolowane.

Obrazy Docker są szablonami do tworzenia kontenerów. Zawierają system plików z aplikacją, bibliotekami, zmiennymi środowiskowymi i innymi elementami potrzebnymi do uruchomienia. Obrazy można swobodnie dystrybuować między systemami.

Rejestry Docker przechowują obrazy kontenerów. Domyślnym rejestrem publicznym jest Docker Hub zawierający tysiące gotowych obrazów. Możliwe jest także tworzenie własnych prywatnych rejestrów.

Instalacja i konfiguracja

Wymagania systemowe

Docker działa na systemach Linux, Windows i macOS. Do instalacji wymagany jest 64-bitowy procesor, co najmniej 4GB pamięci RAM oraz wsparcie dla technologii wirtualizacji w postaci Hyper-V (Windows) lub VT-x (Linux). Starsze systemy mogą wymagać włączenia obsługi virtualizacji w BIOS.

Instalacja Dockera

Na systemach Linux Docker instaluje się zwykle z oficjalnego repozytorium za pomocą menedżera pakietów danej dystrybucji, np. apt lub yum. Na Windows i macOS dostępne są instalatory graficzne.

Po zainstalowaniu Dockera należy uruchomić usługę demona dockera, która umożliwia zarządzanie kontenerami. Na Linux uruchamia się ją poleceniem systemctl start docker.

Konfiguracja środowiska

Rekomendowane jest dodanie użytkownika do grupy docker, aby umożliwić uruchamianie kontenerów bez sudo. Można także skonfigurować ustawienia demona i zasady bezpieczeństwa w pliku /etc/docker/daemon.json.

Tworzenie i zarządzanie kontenerami

Budowanie obrazów kontenerów

Obrazy Docker buduje się na podstawie pliku Dockerfile zawierającego instrukcje potrzebne do przygotowania środowiska. Plik Dockerfile zaczyna się zwykle od podania obrazu bazowego, np. ubuntu, node, na którym budujemy własny obraz.

Do budowania obrazów służy polecenie docker build. Powstały obraz można oznaczyć tagiem i przesłać do rejestru kontenerów za pomocą docker push.

Uruchamianie kontenerów

Uruchomienie kontenera na podstawie obrazu wykonuje się poleceniem docker run. Można w ten sposób uruchomić np. kontener bazy danych, aplikacji, strony www. Do kontenera można przekazać zmienne środowiskowe i zamontować wolumeny.

Ważne jest nadanie kontenerowi unikalnej nazwy za pomocą --name, co ułatwia późniejsze zarządzanie. Kontener może być uruchomiony w trybie detached (-d), co pozwala na pracę w tle.

Zarządzanie kontenerami

Podstawowe operacje na kontenerach to uruchamianie, zatrzymywanie, restartowanie, usuwanie. Służą do tego odpowiednio polecenia docker start, stop, restart i rm. Status kontenerów sprawdza docker ps.

Możliwe jest także wyświetlanie logów kontenera (docker logs), kopiowanie plików z/do kontenera (docker cp), czy uruchamianie komend wewnątrz kontenera bez konieczności logowania się do niego (docker exec).

Sieciowanie kontenerów

Tworzenie sieci

Domyślnie kontenery uruchamiane są w sieci bridge, która izoluje je od siebie. Aby kontenery mogły się komunikować, tworzy się dodatkowe sieci za pomocą docker network create.

Możliwe jest tworzenie sieci overlay łączących kontenery na wielu hostach docker oraz sieci macvlan bezpośrednio podłączające kontenery do fizycznej sieci.

Łączenie kontenerów w sieć

Podczas uruchamiania kontenera przy pomocy --network podaje się nazwę sieci, do której kontener ma zostać podłączony. Możliwe jest podłączenie do wielu sieci.

Alternatywnie kontener już działający można podłączyć do sieci poleceniem docker network connect.

Komunikacja między kontenerami

Kontenery w tej samej sieci mogą się ze sobą komunikować używając nazw kontenerów jako aliasów hostów. Umożliwia to np. stworzenie sieci dla aplikacji i bazy danych.

Możliwe jest także nadawanie kontenerom stałych adresów IP oraz tworzenie własnych subnetów i tabel routingu.

Przechowywanie danych w Dockerze

Wolumeny danych

Dane zapisywane w kontenerze domyślnie są usuwane po jego zatrzymaniu. Aby zapobiec utracie danych używa się wolumenów - możliwe jest zamontowanie katalogu z hosta lub dedykowanego wolumenu docker.

Na potrzeby testów można też użyć tymczasowych wolumenów, które istnieją tylko przez czas życia kontenera.

Montowanie wolumenów

Podczas tworzenia kontenera za pomocą opcji -v podaje się ścieżkę wolumenu i lokalizację w kontenerze, gdzie ma być zamontowany, np. /data.

Możliwe jest również późniejsze montowanie wolumenów do istniejących kontenerów przy użyciu docker volume create i docker volume mount.

Backup i przywracanie danych

Dane z wolumenów można skopiować na hosta poleceniem docker cp. Często wykonuje się też regularne kopie zapasowe całych wolumenów za pomocą narzędzi jak restic czy rsync.

Przywracanie danych polega na skopiowaniu ich z powrotem na wolumen, a następnie resecie kontenera.

Docker Compose

Instalacja i konfiguracja

Docker Compose umożliwia definowanie i uruchamianie wielokontenerowych aplikacji. Instaluje się go zazwyczaj wraz z Dockerem. Opcjonalnie można utworzyć plik ~/.docker/compose.yaml ze zmiennymi środowiskowymi.

Definiowanie usług w plikach

Głównym elementem Docker Compose są pliki yaml definiujące poszczególne usługi/kontenery, sieci, wolumeny. Dla każdej usługi określa się obraz, porty, zmienne i inne opcje.

Pliki można dzielić na kilka mniejszych i łączyć w jeden projekt przy pomocy extends. Pozwala to na modularną konfigurację.

Uruchamianie środowisk produkcyjnych

Po zdefiniowaniu usług i powiązań między nimi, całe środowisko uruchamia się poleceniem docker-compose up. W razie potrzeby można skalować liczbę kontenerów danej usługi.

Docker Compose ułatwia zarządzanie złożonymi aplikacjami microserwisowymi i pozwala szybko odtworzyć lokalne lub produkcyjne środowisko.

Podsumowanie

Docker dzięki kontenerom umożliwia szybkie tworzenie przenośnych środowisk do budowania, testowania i wdrażania aplikacji. Izolacja procesów i jasno zdefiniowane interfejsy komunikacyjne sprawiają, że Docker doskonale sprawdza się w architekturze mikrousługowej.

Najważniejsze korzyści z zastosowania Docker to usprawnienie procesu CI/CD, łatwa skalowalność, szybki deployment, lepsze zarządzanie zasobami i wysoka dostępność aplikacji. Dzięki społeczności powstają też gotowe obrazy większości popularnych narzędzi i środowisk programistycznych.

Technologia kontenerów to przyszłość developmentu - warto poznać Docker, by móc czerpać z niego pełne korzyści we własnych projektach.

Najczęściej zadawane pytania

Obraz Docker jest szablonem/wzorcem do uruchamiania kontenerów. Kontener powstaje w wyniku uruchomienia obrazu i zawiera działającą aplikację wraz z całym środowiskiem.

Domyślnie dane z kontenerów są przechowywane w warstwie writable kontenera i są usuwane przy jego zatrzymaniu. Aby zachować dane należy użyć wolumenów Docker.

Rekomendowane jest cykliczne wykonywanie kopii zapasowych wolumenów Dockera za pomocą odpowiednich narzędzi. Można też synchronizować wolumeny z folderami na hoście.

Możliwe jest attachowanie terminala do kontenera i debugowanie tak jak na maszynie lokalnej. Przydatne są też logi i możliwość inspekcji kontenera poleceniem exec.

Obrazy można przenosić przy pomocy docker save/load lub korzystając z rejestrów Docker Hub/ACR i funkcji push/pull.

5 Podobnych Artykułów:

  1. Testowanie i debugowanie kodu w Pythonie - poradnik dla początkujących
  2. Tworzenie gier 2D w Unity krok po kroku - poradnik dla początkujących
  3. Najlepsze książki o algorytmach i strukturach danych dla programistów
  4. Podstawy Linuxa dla programistów - kurs dla początkujących
  5. Analiza złożoności algorytmów w pigułce - notacje O(n), theta, omega
tagTagi
shareUdostępnij
Autor Adam Pawlak
Adam Pawlak

Cześć, jestem Adam, a witajcie na moim blogu o programowaniu! Tutaj znajdziesz wiele przydatnych informacji, porad i inspiracji związanych z fascynującym światem kodowania i rozwoju oprogramowania.

Oceń artykuł
rating-fill
rating-fill
rating-fill
rating-fill
rating-fill
Ocena: 0.00 Liczba głosów: 0

Komentarze (0)

email
email

Polecane artykuły