W tej lekcji przechodzimy do praktyki! Poznamy najważniejsze komendy do zarządzania obrazami i kontenerami. Dobra wiadomość jest taka, że komendy te są niemal identyczne dla Dockera i Podmana.

Uwaga: W tej lekcji będziemy używać komendy docker, ale możesz bez problemu zastąpić ją podman. Jeśli używasz Podmana, możesz nawet stworzyć alias alias docker=podman, a wszystkie polecenia będą działać bez zmian.

Obraz vs. Kontener: Kluczowe rozróżnienie

Zanim zaczniemy, musimy zrozumieć dwa fundamentalne pojęcia:

  • Obraz (Image): To jest szablon – statyczny, niezmienny plik zawierający wszystko, co potrzebne do uruchomienia aplikacji (kod, biblioteki, środowisko). Obrazy pobieramy z tzw. rejestrów, z których najpopularniejszym jest Docker Hub. Obraz jest jak klasa w programowaniu obiektowym albo przepis na ciasto.
  • Kontener (Container): To jest uruchomiona, działająca instancja obrazu. Możesz stworzyć wiele kontenerów z jednego obrazu, tak jak możesz stworzyć wiele obiektów z jednej klasy lub upiec wiele ciast z jednego przepisu. Kontener to żywy proces na Twojej maszynie.

Podstawowe komendy

Oto zestawienie najważniejszych komend, których będziesz używać na co dzień.

1. docker pull [NAZWA_OBRAZU]

Pobiera obraz z rejestru (domyślnie z Docker Huba) na Twoją lokalną maszynę.

Przykład: Pobierzmy oficjalny obraz serwera WWW nginx.

docker pull nginx:latest

(:latest to tzw. tag, oznaczający najnowszą wersję obrazu).

2. docker images

Wyświetla listę wszystkich obrazów, które masz na swoim komputerze.

docker images

3. docker run [OPCJE] [NAZWA_OBRAZU]

To najważniejsza komenda. Tworzy nowy kontener z podanego obrazu i go uruchamia. Posiada wiele przydatnych opcji:

  • -d (detached): Uruchamia kontener w tle i wypisuje jego ID. Bez tej flagi, kontener uruchomi się na pierwszym planie, blokując Twój terminal.
  • -p [PORT_HOSTA]:[PORT_KONTENERA]: Mapuje port z Twojego komputera (hosta) na port wewnątrz kontenera. To pozwala “wystawić” usługę z kontenera na zewnątrz.
  • --name [NAZWA]: Nadaje kontenerowi czytelną nazwę, co ułatwia zarządzanie.

Przykład: Uruchommy kontener z nginx w tle, nazwijmy go moj-serwer-www i zmapujmy port 8080 naszego komputera na port 80 w kontenerze.

docker run -d -p 8080:80 --name moj-serwer-www nginx

Teraz, jeśli otworzysz przeglądarkę i wejdziesz na http://localhost:8080, powinieneś zobaczyć stronę powitalną NGINX!

4. docker ps

Wyświetla listę aktualnie uruchomionych kontenerów.

docker ps

Aby zobaczyć wszystkie kontenery (również te zatrzymane), użyj flagi -a:

docker ps -a

5. docker stop [NAZWA_LUB_ID]

Zatrzymuje działający kontener.

Przykład: Zatrzymajmy nasz serwer NGINX.

docker stop moj-serwer-www

6. docker start [NAZWA_LUB_ID]

Uruchamia zatrzymany wcześniej kontener.

docker start moj-serwer-www

7. docker rm [NAZWA_LUB_ID]

Usuwa zatrzymany kontener. Nie można usunąć działającego kontenera – trzeba go najpierw zatrzymać.

Przykład:

docker stop moj-serwer-www
docker rm moj-serwer-www

8. docker rmi [NAZWA_LUB_ID_OBRAZU]

Usuwa obraz z lokalnej maszyny.

docker rmi nginx

9. docker logs [NAZWA_LUB_ID]

Wyświetla logi (standardowe wyjście) z kontenera. Niezwykle przydatne do debugowania.

Przykład: Zobaczmy logi naszego serwera NGINX.

docker logs moj-serwer-www

Podsumowanie i dalsze kroki

Te komendy to absolutna podstawa, która pozwoli Ci swobodnie zarządzać kontenerami. Jak widzisz, jest to dość manualny proces – trzeba pamiętać o uruchamianiu, zatrzymywaniu i usuwaniu kontenerów.

W kolejnym module zobaczymy, jak Kubernetes automatyzuje te zadania, pozwalając nam zarządzać nie jednym, a setkami lub tysiącami kontenerów w sposób deklaratywny.