> ## Content Index
> Fetch the complete content index at: https://innasiec.pl/llms.txt
> Use this file to discover other available public pages before exploring further.

# Wprowadzenie do Dockera: Twój Pierwszy Kontener Krok po Kroku
- URL: https://innasiec.pl/wprowadzenie-do-dockera-twoj-pierwszy-kontener-krok-po-kroku/
- Published: 2025-05-10T19:32:27.000Z
- Updated: 2025-05-10T19:32:27.000Z
- Description: Zaczynasz z Dockerem? Ten prosty przewodnik pokaże Ci, jak zainstalować i uruchomić swój pierwszy kontener. Poznaj podstawy konteneryzacji bez tajemnic!
- Author: Rafał Rudewicz
- Tags: NetDevOps, #toc, #syntax-highlight

Jeśli konfigurujesz, testujesz i debugujesz rozwiązania sieciowe, Docker może znacząco uprościć Twoją codzienną pracę. Zapomnij o czasochłonnym stawianiu maszyn wirtualnych czy ręcznym odtwarzaniu środowisk – kontenery pozwalają Ci w kilka sekund uruchomić izolowane środowiska, które pozwalają znacznie efektywniej wykorzystać dostępne zasoby.

### Czym jest Docker?

Docker to platforma, która umożliwia tworzenie, wdrażanie i zarządzanie aplikacjami w kontenerach. **Technologia ta pozwala na „opakowanie” aplikacji oraz wszystkich jej zależności w jeden spójny pakiet.** Zawiera on wszystko, co jest potrzebne do uruchomienia aplikacji — od kodu po biblioteki i inne zależności. Dzięki temu każdy kontener jest i działa identycznie jak jego twórca go przygotował. Zapomnij o "u mnie działa" 😉

### Czym jest kontener?

Kontener Docker to lekka, izolowana jednostka działająca bezpośrednio na jądrze systemu operacyjnego hosta, tworząca odrębne środowisko dla aplikacji i jej zależności. Dzięki temu aplikacje uruchamiane w kontenerach działają identycznie w różnych środowiskach. W przeciwieństwie do maszyny wirtualnej, która wymaga własnego systemu operacyjnego i większych zasobów, kontener działa jak proces na hoście — jest szybki, zajmuje mniej miejsca i zużywa mniej pamięci, zapewniając jednocześnie niezbędną izolację.

### Różnica między kontenerem a maszyną wirtualną (VM)

| Cecha           | Kontener                       | Maszyna wirtualna (VM)             |
| --------------- | ------------------------------ | ---------------------------------- |
| Jądro systemu   | Współdzielone z hostem         | Własne jądro, niezależny system OS |
| Uruchamianie    | Szybkie, jako proces na hoście | Wolniejsze, wymaga pełnego OS      |
| Zasoby          | Mniejsze zużycie (CPU, RAM)    | Większe zużycie zasobów            |
| Izolacja        | Izolacja na poziomie procesów  | Izolacja na poziomie sprzętowym    |
| Wielkość obrazu | Mała, tylko niezbędne pliki    | Duża, cały system operacyjny       |

![](https://innasiec.pl/content/images/2025/04/docker-vs-vm.webp)

Maszyny wirtualne mogą pełnić podobną funkcję jak kontenery, ale w wielu przypadkach są po prostu zbyt ciężkie:

- długi czas startu (minuty vs. sekundy),
- duży narzut zasobów (pełny system operacyjny),
- trudniejsza automatyzacja i zarządzanie.

## Jak Docker działa w praktyce?

Docker działa na zasadzie klient-serwer. Demon Docker Engine działa w tle, a Ty komunikujesz się z nim przez API lub narzędzie CLI.

graph TD subgraph Architektura Dockera A\[Klient Dockera\] -->|Komunikacja| B\[Daemon Dockera\] B --> C\[Obrazy Dockera\] B --> D\[Kontenery Dockera\] B --> E\[Rejestry Dockera\] E -->|Pobieranie/Publikowanie| C end subgraph Cykl życia kontenera C -->|Tworzenie| D D -->|Uruchamianie| F\[Uruchomiony kontener\] F -->|Zatrzymywanie| G\[Zatrzymany kontener\] G -->|Usuwanie| H\[Usunięty kontener\] end 

## Podstawowe komponenty Docker

**Obraz (image)**  
Obraz Dockera to nieruchoma, read-only (tylko do odczytu) szablonowa warstwa, która zawiera wszystkie pliki, konfiguracje i zależności potrzebne do uruchomienia aplikacji. Można go porównać do „fotografii” środowiska uruchomieniowego. Obrazy są tworzone na podstawie plików Dockerfile, które definiują krok po kroku, jakie elementy mają się znaleźć w obrazie.

- **Warstwowa struktura:** Obrazy składają się z wielu warstw, co pozwala na efektywne zarządzanie i ponowne wykorzystywanie wspólnych elementów pomiędzy różnymi obrazami.
- **Wersjonowanie:** Każdy obraz może mieć tagi (np. `ubuntu:20.04`), które ułatwiają zarządzanie wersjami.
- **Źródła obrazów:** Obrazy można pobierać z publicznych rejestrów (np. Docker Hub) lub tworzyć własne, dostosowane do potrzeb projektu.

**Kontener (container)**  
Kontener to działająca instancja obrazu, czyli uruchomiony proces lub zestaw procesów izolowanych od reszty systemu operacyjnego. To właśnie w kontenerze działa Twoja aplikacja.

- **Izolacja:** Kontener ma własną przestrzeń procesów, system plików, sieć i inne zasoby, co zapobiega konfliktom z innymi aplikacjami.
- **Szybkie uruchamianie i zatrzymywanie:** Kontenery startują praktycznie natychmiast, ponieważ korzystają ze współdzielonego jądra systemu operacyjnego.
- **Tymczasowość:** Kontenery są zazwyczaj efemeryczne – po zatrzymaniu lub usunięciu ich stan jest tracony, chyba że dane są przechowywane w wolumenach.

**Wolumen (volume)**  
Wolumeny to specjalne obszary dyskowe przeznaczone do trwałego przechowywania danych używanych przez kontenery. Są niezależne od cyklu życia kontenera.

- **Trwałość danych:** Dane zapisane w wolumenach pozostają nawet po usunięciu kontenera.
- **Dzielenie danych:** Wolumeny mogą być współdzielone między wieloma kontenerami, co umożliwia wymianę danych.
- **Bezpieczeństwo i wydajność:** Używanie wolumenów pozwala na lepszą kontrolę nad danymi oraz często zwiększa wydajność operacji dyskowych w porównaniu do zapisu bezpośrednio w kontenerze.

**Sieć (network)**  
Sieci Dockera umożliwiają komunikację pomiędzy kontenerami oraz z zewnętrznym światem.

- **Typy sieci:**  
  - **Bridge (most):** Domyślna sieć izolowana dla kontenerów na tym samym hoście.
  - **Host:** Kontener korzysta z sieci hosta bez izolacji.
  - **Overlay:** Umożliwia komunikację między kontenerami na różnych hostach (np. w klastrze).
- **Konfiguracja:** Sieci można konfigurować pod kątem bezpieczeństwa (firewalle, reguły dostępu) oraz routingu.
- **DNS i nazwy kontenerów:** Docker automatycznie zarządza nazwami DNS dla kontenerów, co ułatwia ich wzajemną komunikację.

**Dockerfile**  
Plik tekstowy definiujący instrukcje budowy obrazu Docker. Zawiera polecenia takie jak:

- `FROM` – bazowy obraz,
- `RUN` – komendy do wykonania podczas budowania,
- `COPY`/`ADD` – kopiowanie plików,
- `CMD`/`ENTRYPOINT` – domyślna komenda uruchamiana w kontenerze.

**Rejestr (registry)**  
Miejsce przechowywania obrazów Docker.

- **Publiczne rejestry:** np. Docker Hub, GitHub Container Registry.
- **Prywatne rejestry:** Firmowe serwery do bezpiecznego przechowywania obrazów.
- Umożliwia łatwe pobieranie i publikowanie obrazów.

## Instalacja Dockera

Ze względu na specyfikę zastosowania, Docker był pierwotnie przeznaczony głównie dla systemów Linux, jednak podjęto wiele działań, aby zapewnić jego działanie także na platformach Windows i macOS.

**Ubuntu**

```bash
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

**Windows/MacOS**

  - Pobierz [Docker Desktop](https://www.docker.com/products/docker-desktop/?ref=innasiec.pl) ze strony Docker

💡

Na MacOS Docker jest również dostępny z poziomu [Homebrew](https://formulae.brew.sh/formula/docker?ref=innasiec.pl).

Docker domyślnie jest instalowany z obrazem `hello-world`, który pozwala na sprawdzenie, czy instalacja przebiegła poprawnie.

```bash
docker run hello-world

```

To proste polecenie uruchomi kontener testowy, który wyświetli krótki komunikat potwierdzający poprawność instalacji.

## Najważniejsze polecenia Docker

Poniżej znajdziesz zestaw podstawowych komend, które będziesz używać niemal codziennie pracując z Dockerem:

- **docker pull**  
Pobiera obraz Dockera z rejestru, np. Docker Hub.

```bash
docker pull ubuntu

```

- **docker images**  
Wyświetla listę wszystkich pobranych obrazów Dockera.

```bash
docker images
```

![](https://innasiec.pl/content/images/2025/04/docker_images_optimized.webp)

- **docker run**  
Uruchamia kontener na podstawie obrazu.
  - `-d` \- oznacza detached, czyli kontener będzie działał w tle.
  - `--name` \- nazwa kontenera.
  - `n8nio/n8n` \- to nazwa obrazu, z którego ma zostać uruchomiony kontener.

```bash
docker run -d --name my_container n8nio/n8n
```

![](https://innasiec.pl/content/images/2025/04/docker_run.webp)

- **docker stop**  
Zatrzymuje uruchomiony kontener.  
Musisz znać nazwę lub ID kontenera, które znajdziesz przez `docker ps`.

```bash
docker stop my_container

```

![](https://innasiec.pl/content/images/2025/04/docker_stop.webp)

- **docker ps**  
Wyświetla listę aktualnie działających kontenerów.  
Aby zobaczyć wszystkie kontenery, także zatrzymane, użyj:

```bash
docker ps -a

```

![](https://innasiec.pl/content/images/2025/04/docker_ps-a.webp)

- **docker rmi**  
Usuwa obraz Dockera, którego już nie potrzebujesz. Operacja jest nieodwracalna.

```bash
docker rmi 9f9d60171cff
```

![](https://innasiec.pl/content/images/2025/04/docker_rmi.webp)

- **docker rm**  
Usuwa kontener. Operacja jest nieodwracalna – dane w kontenerze zostaną utracone.

```bash
docker rm my_container

```

## Wejście do działającego kontenera (docker exec)

Czasem potrzebujesz wejść do środka kontenera, np. aby wykonać polecenia w jego środowisku.

```bash
docker exec -it my_container /bin/bash

```

- `-it` — interaktywny tryb terminala,
- `/bin/bash` — powłoka bash (jeśli dostępna w obrazie).

W przypadku `nginx` może być konieczne użycie `/bin/sh`, jeśli bash nie jest zainstalowany.

## Podsumowanie

Docker to potężne narzędzie, które znacznie przyspiesza tworzenie i uruchamianie aplikacji oraz całych stacków. Dzięki niemu możesz oszczędzać zarówno czas, jak i zasoby, a także znacznie usprawnić proces testowania i wdrażania aplikacji.

Powodzenia w nauce i wykorzystywaniu Dockera w swoich projektach! To narzędzie, które może znacznie poprawić efektywność Twojej pracy.