W naszej serii artykułów o Dockerze zbadaliśmy jego kluczowe aspekty, od wprowadzenia, przez instalację na Windows,
po konteneryzację i zarządzanie kontenerami, szczególnie w kontekście aplikacji Java i serwerów HTTP. Skupiliśmy się
na praktycznych aspektach, jak tworzenie obrazów i kontenerów oraz ich zarządzanie, podkreślając znaczenie Dockera
dla deweloperów pracujących na różnych platformach. Dodatkowo, przybliżyliśmy Docker Compose, narzędzie kluczowe dla
zarządzania wielokontenerowymi aplikacjami, które umożliwia efektywne wdrażanie i skalowanie projektów.
Na zakończenie, przygotowaliśmy przegląd kluczowych komend Dockera, które omawialiśmy w poprzednich rozdziałach.
Zostały one zebrane w jednym miejscu, aby ułatwić Ci szybkie przypomnienie sobie, jakie działanie wykonuje każda z
komend.
docker pull [nazwa_obrazu] — służy do pobierania obrazu z repozytorium Docker Hub do
lokalnego środowiska. Po wpisaniu nazwy obrazu, Docker wyszuka i pobierze najnowszą wersję tego obrazu, chyba że
zostanie określona inna tagowana wersja.
docker run [nazwa_obrazu] — służy do uruchomienia kontenera na bazie podanego obrazu.
Docker najpierw sprawdzi, czy obraz jest dostępny lokalnie, a jeśli nie, spróbuje go pobrać z Docker Hub. Po
pomyślnym pobraniu i załadowaniu obrazu, komenda uruchomi kontener z tym obrazem jako bazą.
docker pull nginx — używana do pobrania oficjalnego obrazu serwera HTTP nginx z
Docker Hub. Po jej wykonaniu Docker sprawdzi, czy lokalnie istnieje najnowsza wersja obrazu nginx, a jeśli nie,
pobierze go z Docker Hub. Domyślnie pobierana jest najnowsza wersja obrazu, chyba że zostanie określona konkretna
wersja za pomocą tagu, na przykład
docker pull nginx:1.19
docker run -p 8080:80 nginx — używana do uruchomienia kontenera Docker z obrazem
nginx, który jest popularnym serwerem HTTP. Opcja -p
8080:80 jest kluczowa,
ponieważ mapuje port
80 w kontenerze
(domyślny port, na którym nginx nasłuchuje) na port
8080 na Twoim hoście lokalnym.
Oznacza to, że gdy serwer nginx działa w kontenerze Docker, można uzyskać do niego dostęp z przeglądarki
internetowej na hoście lokalnym, wpisując
http://localhost:8080.
Docker przekieruje ten ruch sieciowy z portu
8080 hosta na port
80 w kontenerze.
Jeśli Docker nie znajdzie lokalnego obrazu nginx, automatycznie pobierze najnowszą wersję z Docker Hub przed
uruchomieniem kontenera.
docker ps — używana do wyświetlania informacji o aktualnie uruchomionych kontenerach
w Dockerze. Gdy ją wykonasz, otrzymasz listę kontenerów, które są aktywne w danym momencie, wraz z szeregiem
użytecznych informacji na ich temat.
docker stop [id_kontenera] — używana do zatrzymywania działającego kontenera Docker.
Identyfikator kontenera możesz znaleźć poprzez użycie komendy
docker ps,
która wyświetla listę wszystkich uruchomionych kontenerów wraz z ich identyfikatorami.
docker build -t [nazwa_obrazu]:[tag] [path_do_Dockerfile] — używana do budowania
obrazu Docker na podstawie instrukcji zawartych w pliku Dockerfile. Opcja
-t pozwala na
nadanie tagu, czyli etykiety, nowo utworzonemu obrazowi, co ułatwia jego identyfikację i zarządzanie nim.
docker images — używana w Dockerze do wyświetlania listy wszystkich obrazów
dostępnych lokalnie na Twoim komputerze. Gdy wykonasz tę komendę, otrzymasz tabelę zawierającą informacje o każdym
obrazie.
docker run -d -p [port_hosta]:[port_kontenera] [nazwa_obrazu] — używana do
uruchomienia kontenera Docker w trybie odłączonym (detached) z przekierowaniem portów. Pozwala to na uruchomienie
kontenera w tle, umożliwiając kontynuację pracy w terminalu, a jednocześnie umożliwia dostęp do usług w kontenerze z
zewnątrz maszyny hosta.
docker logs [id_kontenera] --follow — używana do wyświetlania logów z
działającego kontenera Docker oraz śledzenia nowych logów w czasie rzeczywistym. Aby wyjść z tego trybu, użyj
kombinacji klawiszy CTRL+C.
docker exec -it [id_kontenera] /bin/bash — używana do uruchomienia powłoki bash
w działającym kontenerze Docker, umożliwiając interaktywne wykonywanie poleceń wewnątrz kontenera, takich jak
ls (listowanie
plików),
cd (zmiana katalogu) czy
pwd (wyświetlenie bieżącego
katalogu).
docker-compose up -d — używana do uruchamiania aplikacji zdefiniowanej w pliku
docker-compose.yml. Ta komenda automatycznie buduje wszystkie obrazy, które są potrzebne
(jeśli jeszcze nie istnieją), a następnie tworzy i uruchamia kontenery zgodnie z konfiguracją określoną
w
docker-compose.yml. Parametr
-d oznacza, że kontenery będą działać w tle,
a konsola będzie natychmiast dostępna do dalszych poleceń:
docker-compose logs — używana do wyświetlania logów z kontenerów uruchomionych
za pomocą Docker Compose. Ta komenda jest bardzo przydatna, gdy chcesz zobaczyć, co dzieje się wewnątrz Twoich
kontenerów, szczególnie podczas debugowania problemów.
Trwałość danych w kontenerze
Domyślnie, dane wewnątrz kontenera Docker są nietrwałe. Oznacza to, że gdy kontener jest usuwany, wszystkie dane, które zostały w
nim utworzone lub zmodyfikowane, również zostają usunięte. Jest to zgodne z filozofią konteneryzacji, gdzie
kontenery są lekkie i tymczasowe. Jednak w wielu przypadkach, takich jak bazy danych, logi, pliki konfiguracyjne,
potrzebujemy trwałego przechowywania danych. Do tego celu Docker oferuje rozwiązania takie jak
Volumeny,
Bind Mounts,
Tmpfs Mounts.
Zatrzymanie a usunięcie kontenera
Zatrzymanie i usunięcie kontenera w Dockerze to dwa różne procesy, które mają odmienne konsekwencje dla kontenerów i
danych w nich przechowywanych.
Zatrzymanie kontenera — Polega na tymczasowym wstrzymaniu działania kontenera. Używa się do tego komendy
docker stop
[id_kontenera], która wysyła sygnał
SIGTERM,
a po upływie określonego czasu (jeśli kontener nadal działa) - sygnał
SIGKILL.
Zatrzymanie kontenera nie usuwa danych zgromadzonych wewnątrz kontenera lub na przypisanych do niego
volumenach. Kontener w stanie zatrzymanym można później ponownie uruchomić przy użyciu
docker start, co pozwala
kontynuować pracę z zachowaniem stanu, w jakim kontener został zatrzymany.
Usuwanie kontenera — Jest to proces, w którym kontener jest całkowicie usuwany z systemu za pomocą komendy
docker rm
[id_kontenera]. Usunięcie kontenera powoduje, że wszystkie dane zapisane w jego systemie plików są tracone, chyba że
są przechowywane na zewnętrznym volumenie lub bind mouncie. Po usunięciu kontenera nie ma możliwości jego
przywrócenia czy odtworzenia stanu, w jakim się znajdował. To ważna różnica w porównaniu do zatrzymania, ponieważ
usuwanie jest akcją definitywną i nieodwracalną.
Logi w Docker Compose
Docker Compose zachowuje logi kontenerów nawet po ich zatrzymaniu. Dzieje się tak, ponieważ Docker przechowuje logi
dla kontenerów w swojej wewnętrznej bazie danych logów, a
docker-compose logs pozwala na dostęp do tych logów
niezależnie od tego, czy kontenery są aktualnie uruchomione, czy też zostały zatrzymane.
Logi są przechowywane do momentu usunięcia kontenera. Jeśli kontener zostanie usunięty (np. za pomocą
docker-compose
down), jego logi również zostaną usunięte.
W zależności od konfiguracji Docker, logi mogą być ograniczone pod względem rozmiaru. Można skonfigurować Docker,
aby logi były automatycznie przycinane po osiągnięciu pewnego rozmiaru.
Warto też wiedzieć, że gdy uruchomisz polecenie
docker-compose logs w środowisku,
gdzie działa na przykład 10 kontenerów zarządzanych przez Docker Compose, otrzymasz logi ze wszystkich tych kontenerów.
Jeśli chcesz zobaczyć logi tylko z określonej usługi, możesz to zrobić, dodając nazwę usługi do polecenia,
np.
docker-compose logs [nazwa_usługi].
Warto wiedzieć
Chociaż nasz kurs dostarcza solidnych podstaw i praktycznych umiejętności z zakresu pracy z Dockerem, zdaję sobie
sprawę, że wciąż istnieje wiele zagadnień, które mogą znacząco wzbogacić Twoją wiedzę i doświadczenie. Aby jeszcze
lepiej zgłębić temat, polecam kurs
Docker od podstaw - dla programistów i nie tylko.
Stanowi on doskonałe uzupełnienie i rozszerzenie naszego kursu.
Natomiast jeżeli wolisz
kursy anglojęzyczne, proponuję prawdziwy hit —
"Docker & Kubernetes: The Practical Guide [2023 Edition]".
Ponad
157 000 uczestników, ocena około 4,7.
Autor: Jarek Klimas
Data: 19 stycznia 2024
Labele: Backend, Poziom średniozaawansowany, Java
Czy informacje, które otrzymałeś, były pomocne?
Jeśli tak, zapraszam Cię do podarowania mi kawy.
Dołącz do grupy, w której znajdziesz ciekawe posty oraz poznasz odpowiedzi na swoje pytania!
-
Regularnie publikowane posty dotyczące, Springa i Hibernate'a oraz samej Javy.
-
Możliwość zadawania pytań osobom tworzącym społeczność budowaną
wokół tych samych zainteresowań
-
Bezpośredni kontakt z autorem portalu i kursów Javappa!
-
Wymiana doświadczeń między członkami grupy
-
Przyjazna atmosfera w zamkniętej grupie