Zarządzanie kontenerami

1. Wprowadzenie

W poprzednich lekcjach nauczyłeś się, czym są obrazy Dockera i jak tworzyć własne przy użyciu pliku Dockerfile. Teraz przechodzimy do kluczowego elementu pracy z Dockerem — kontenerów. To właśnie kontenery uruchamiają Twoje aplikacje na podstawie obrazów, izolując je od reszty systemu. W tej lekcji poznasz sposoby ich tworzenia, uruchamiania, monitorowania oraz zarządzania danymi i siecią.


2. Czym są kontenery Dockera

Kontener to działająca instancja obrazu Dockera — czyli uruchomione środowisko, które wykonuje określone zadanie, np. serwuje stronę WWW, uruchamia API lub skrypt. Każdy kontener:

  • ma własny system plików (pochodzący z obrazu),
  • może posiadać swoje porty, procesy i zmienne środowiskowe,
  • działa w izolacji od innych kontenerów i hosta.

Możesz mieć wiele kontenerów opartych o ten sam obraz (np. 10 serwerów Nginx działających równolegle).


3. Tworzenie, uruchamianie i usuwanie kontenerów

3.1 Tworzenie i uruchamianie kontenerów

Podstawowe polecenie:

Przykłady:

  • Uruchomienie prostego kontenera:

(Docker pobiera obraz z Docker Hub i uruchamia go jednorazowo.)

  • Uruchomienie interaktywnego terminala w kontenerze:

Flagi:

  • -i – tryb interaktywny (input),
  • -t – terminal (tty).

  • Uruchomienie kontenera w tle (detached mode):

Flaga -d powoduje, że kontener działa w tle.

  • Udostępnienie portu:

Flaga -p mapuje port hosta (8080) na port kontenera (80).


3.2 Wyświetlanie uruchomionych kontenerów

Pokazuje wszystkie działające kontenery (ID, nazwę, porty, status).

Aby zobaczyć również zatrzymane kontenery:


3.3 Zatrzymywanie i usuwanie kontenerów

  • Zatrzymanie kontenera:
  • Wznowienie zatrzymanego kontenera:
  • Usunięcie kontenera:

Aby usunąć wszystkie nieużywane kontenery:


4. Logi i monitorowanie kontenerów

Docker udostępnia wbudowane narzędzia do podglądu logów i monitorowania zużycia zasobów.

4.1 docker logs — podgląd logów

Polecenie wyświetla dane wyjściowe z kontenera (np. logi aplikacji).

Przykłady:

Przydatne przy debugowaniu aplikacji, np. serwerów webowych lub skryptów backendowych.


4.2 docker stats — monitorowanie zasobów

Wyświetla aktualne zużycie CPU, pamięci, dysku i sieci przez uruchomione kontenery.

Przykładowy wynik:

CONTAINER ID   NAME         CPU %   MEM USAGE / LIMIT     NET I/O
a2f1b3d4c6e7   nginx_app    0.35%   25.4MiB / 2GiB        1.2MB / 800kB

Można także monitorować konkretny kontener:


5. Utrwalanie danych: wolumeny (Volumes)

Kontenery są tymczasowe — po ich usunięciu wszystkie dane wewnętrzne znikają. Aby przechowywać dane trwale, Docker używa wolumenów (volumes) — specjalnych przestrzeni na dysku hosta, które mogą być współdzielone między kontenerami.

5.1 Tworzenie wolumenu

5.2 Użycie wolumenu przy uruchamianiu kontenera

Przykład z Nginx:

Dane z /usr/share/nginx/html (domyślny katalog serwera) zostaną zapisane w wolumenie mydata i nie znikną po usunięciu kontenera.

5.3 Zarządzanie wolumenami

  • Lista wszystkich wolumenów:
  • Szczegóły wolumenu:
  • Usuwanie wolumenu:
  • Usuwanie nieużywanych wolumenów:

Uwaga: wolumeny mogą być współdzielone między wieloma kontenerami, np. baza danych i aplikacja mogą korzystać z tego samego wolumenu z danymi.


6. Sieci w Dockerze

Każdy kontener działa w pewnym rodzaju sieci Dockera. Dzięki temu kontenery mogą komunikować się między sobą i ze światem zewnętrznym. Docker automatycznie zarządza siecią, ale daje też możliwość tworzenia własnych konfiguracji.

6.1 Podstawowe typy sieci

Typ sieci Opis
bridge Domyślna sieć dla kontenerów uruchamianych bez specjalnych ustawień. Kontenery w tej samej sieci „bridge” mogą się ze sobą komunikować.
host Kontener korzysta bezpośrednio z sieci hosta (bez izolacji). Użyteczne przy wysokowydajnych aplikacjach sieciowych.
overlay Służy do łączenia kontenerów działających na różnych hostach (w klastrach, np. z Docker Swarm).
none Kontener nie ma dostępu do sieci. Używane w celach bezpieczeństwa lub testów.

6.2 Sprawdzanie sieci Dockera

  • Lista wszystkich sieci:
  • Szczegóły konkretnej sieci:

6.3 Tworzenie i użycie własnej sieci

Przykład:

Dzięki temu kontenery web i db mogą komunikować się między sobą po nazwach (np. db:3306), bez potrzeby znajomości adresów IP.


7. Praktyczne przykłady

7.1 Uruchomienie aplikacji z zachowaniem danych

  • Tworzy kontener z bazą danych MySQL,
  • Hasło root ustawia przez zmienną środowiskową,
  • Dane bazy zapisuje w wolumenie mysql_data, więc przetrwają restart.

7.2 Monitorowanie aplikacji Node.js


8. Podsumowanie

W tej lekcji poznałeś kluczowe elementy zarządzania kontenerami w Dockerze:

  • Tworzenie i uruchamianie kontenerów (docker run, docker ps, docker stop, docker rm),
  • Monitorowanie i diagnostykę (docker logs, docker stats),
  • Trwałe przechowywanie danych z użyciem wolumenów (docker volume),
  • Komunikację między kontenerami dzięki sieciom Dockera (bridge, host, overlay).

Dzięki tym umiejętnościom możesz nie tylko uruchamiać aplikacje w izolowanych środowiskach, ale też skutecznie nimi zarządzać, analizować ich działanie oraz zapewnić im trwałość danych i komunikację w złożonych środowiskach produkcyjnych.