Zamknij menu
    Nowe
    Pojemnik na klawiaturowej ilustracji 3d

    Jak zainstalować i skonfigurować Docker na Ubuntu – konteneryzacja krok po kroku

    2026-07-18
    Mężczyzna programista pracujący na komputerze stacjonarnym z wieloma monitorami w biurze w firmie programistycznej. Technologie programowania i kodowania stron internetowych

    Jak monitorować ruch sieciowy w systemie Linux za pomocą narzędzia iftop

    2026-07-14
    black pencil on ruled notepad beside white ceramic mug and gray laptop computer

    Jak wybrać najlepszy edytor tekstu? Funkcje, bezpieczeństwo i popularne opcje

    2026-07-13
    Facebook X (Twitter) Instagram
    Linuksowo
    • Główna
    • Dystrybucje
    • Tematy
      • Administracja
      • Bezpieczeństwo
      • Instalacja
      • Oprogramowanie
      • Podstawy
      • Wybór systemu
      • Rozszerzenia plików
    • Pozostałe
    Linuksowo
    Główna»Administracja»Jak zainstalować i skonfigurować Docker na Ubuntu – konteneryzacja krok po kroku
    Administracja

    Jak zainstalować i skonfigurować Docker na Ubuntu – konteneryzacja krok po kroku

    Norbert BarwickiNorbert BarwickiBrak komentarzy9 min. czyt.
    Pojemnik na klawiaturowej ilustracji 3d
    Udostępnij
    Facebook Twitter LinkedIn Pinterest E-mail

    Docker zrewolucjonizował sposób, w jaki deweloperzy i administratorzy systemów wdrażają aplikacje, dostarczając lekką platformę konteneryzacyjną, która zapewnia spójność między różnymi środowiskami.

    Ten kompleksowy artykuł szczegółowo omawia instalację, konfigurację i praktyczne użycie Dockera na Ubuntu – od pierwszego uruchomienia po zaawansowane praktyki konteneryzacyjne. Obejmuje on instalację na Ubuntu 20.04 i Ubuntu 24.04 LTS, konfigurację uprawnień użytkownika, podstawowe pojęcia (obrazy i kontenery), tworzenie obrazów przez Dockerfile, Docker Compose do orkiestracji wielu kontenerów, konfigurację sieci, najlepsze praktyki bezpieczeństwa oraz rozwiązywanie typowych problemów.

    Spis treści pokaż
    1 Przygotowanie systemu i instalacja Dockera na Ubuntu
    1.1 Wymagania systemowe i przygotowanie systemu
    1.2 Dodanie oficjalnego repozytorium Dockera
    1.3 Instalacja komponentów Docker Engine
    1.4 Konfiguracja uprawnień użytkownika
    1.5 Konfiguracja automatycznego uruchamiania
    2 Fundamenty Dockera – obrazy, kontenery i architektura
    2.1 Obrazy Dockera i ich struktura
    2.2 Kontenery jako instancje obrazów
    2.3 Cykl życia kontenera i zarządzanie stanem
    3 Budowanie obrazów Dockera za pomocą Dockerfile
    3.1 Optymalizacja obrazów i wieloetapowe budowanie
    3.2 Najlepsze praktyki bezpieczeństwa w Dockerfile
    4 Zarządzanie kontenerami i podstawowe operacje
    4.1 Zarządzanie wolumenami i przechowywaniem danych
    5 Docker Compose – orkiestracja aplikacji wielokontenerowych
    5.1 Struktura i składnia docker-compose.yml
    5.2 Używanie Docker Compose do wdrażania aplikacji
    6 Konfiguracja sieci Dockera i komunikacja między kontenerami
    6.1 Publikacja i mapowanie portów
    7 Bezpieczeństwo Dockera i najlepsze praktyki produkcyjne
    7.1 Uprawnienia użytkownika i izolacja procesów
    7.2 Ograniczenia zasobów i zarządzanie wydajnością
    7.3 Monitorowanie i logowanie
    8 Zaawansowane zarządzanie obrazami i rejestry
    8.1 Znaczenie tagów vs. etykiet (labels)
    8.2 Publikacja obrazów i zarządzanie rejestrami
    8.3 Oczyszczanie nieużywanych obrazów i zasobów
    9 Rozwiązywanie problemów i debugowanie
    9.1 Typowe błędy instalacji i konfiguracji
    9.2 Diagnostyka problemów z kontenerami
    9.3 Najlepsze praktyki debugowania

    Przygotowanie systemu i instalacja Dockera na Ubuntu

    Przed rozpoczęciem instalacji Dockera właściwe przygotowanie systemu zapewnia płynne wdrożenie i optymalną wydajność. Upewnij się, że system jest aktualny, ma włączone repozytoria przez HTTPS oraz poprawnie skonfigurowane klucze GPG.

    Wymagania systemowe i przygotowanie systemu

    Poniżej zebrano minimalne wymagania oraz niezbędne warunki wstępne:

    • architektura 64-bit,
    • co najmniej 4 GB RAM,
    • wystarczająca ilość przestrzeni dyskowej na obrazy i kontenery,
    • kernel Ubuntu ≥ 3.10 (spełniają go współczesne wydania LTS),
    • uprawnienia sudo do instalacji i konfiguracji.

    Aby zaktualizować system i zainstalować pakiety wstępne, wykonaj kolejno:

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y ca-certificates curl gnupg lsb-release

    Dodanie oficjalnego repozytorium Dockera

    Dodanie repozytorium i klucza GPG zapewnia integralność oraz autentyczność pobieranych pakietów. Wykonaj następujące polecenia:

    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg

    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    sudo apt update

    Instalacja komponentów Docker Engine

    Po dodaniu repozytorium zainstaluj silnik i zalecane wtyczki:

    • docker-ce – silnik Docker (Docker Engine) dostarczający demona dockerd;
    • docker-ce-cli – narzędzia wiersza poleceń do zarządzania Dockerem;
    • containerd.io – runtime odpowiedzialny za uruchamianie kontenerów;
    • docker-buildx-plugin – nowoczesny mechanizm budowania obrazów (BuildKit);
    • docker-compose-plugin – wtyczka Docker Compose do orkiestracji wielu usług.

    Wykonaj instalację oraz test „hello-world” potwierdzający poprawną komunikację klienta z demonem:

    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    sudo docker run --rm hello-world

    Komunikat powitalny potwierdza, że klient komunikuje się z demonem, a środowisko Docker działa prawidłowo.

    Konfiguracja uprawnień użytkownika

    Domyślnie polecenia Dockera wymagają sudo. Możesz uprościć pracę, dodając użytkownika do grupy docker (pamiętaj o konsekwencjach bezpieczeństwa):

    sudo usermod -aG docker $USER
    # ponowne zalogowanie lub:
    newgrp docker

    # dodanie innego użytkownika (zastąp nazwą):
    sudo usermod -aG docker nazwa_uzytkownika

    Wygoda kontra bezpieczeństwo: członkostwo w grupie docker de facto daje uprawnienia roota na hoście (np. przez montowanie wolumenów). Wielu ekspertów rekomenduje pozostać przy sudo lub użyć trybu rootless.

    Konfiguracja automatycznego uruchamiania

    Aby Docker startował wraz z systemem i udostępniał kontenery po restarcie, użyj poleceń systemd:

    systemctl is-enabled docker
    sudo systemctl enable docker
    sudo systemctl start docker
    systemctl status docker

    Fundamenty Dockera – obrazy, kontenery i architektura

    Docker wykorzystuje mechanizmy jądra Linux – namespaces i cgroups – aby izolować procesy oraz limitować zużycie zasobów.

    Obrazy Dockera i ich struktura

    Obraz Dockera to niemodyfikowalny szablon z kodem, bibliotekami i konfiguracją. Warstwowa architektura poprawia wydajność i oszczędza miejsce dzięki współdzieleniu cache i baz.

    Kontenery jako instancje obrazów

    Kontener to działająca instancja obrazu z zapisywalną warstwą, która znika przy usunięciu kontenera, o ile dane nie są utrwalone w wolumenach.

    Cykl życia kontenera i zarządzanie stanem

    Najważniejsze stany i ich znaczenie:

    • created – utworzono zasoby, ale nie uruchomiono procesu;
    • running – działa proces PID 1, kontener przetwarza żądania;
    • stopped – proces główny zakończony, kontener zatrzymany;
    • paused – procesy wstrzymane bez ich zamykania;
    • removed – zasoby kontenera zwolnione z hosta.

    Polityki restartu, które warto znać:

    • no – brak automatycznego restartu;
    • always – wznawia kontener także po restarcie demona;
    • unless-stopped – wznawia, o ile nie został ręcznie zatrzymany;
    • on-failure – restartuje tylko przy kodzie wyjścia ≠ 0.

    Budowanie obrazów Dockera za pomocą Dockerfile

    Efektywny Dockerfile minimalizuje rozmiar, zwiększa bezpieczeństwo i przyspiesza wdrożenia. Poniżej zestawienie kluczowych instrukcji:

    • FROM – wybiera obraz bazowy (np. Alpine, Ubuntu);
    • RUN – wykonuje komendy podczas budowania (instalacje, konfiguracje);
    • COPY/ADD – kopiuje pliki do obrazu (preferuj COPY);
    • WORKDIR – ustawia katalog roboczy dla kolejnych kroków;
    • ENV/ARG – zmienne środowiskowe i parametry budowania;
    • EXPOSE – dokumentuje porty używane przez aplikację;
    • ENTRYPOINT/CMD – definiuje proces startowy i argumenty;
    • USER – określa użytkownika do uruchamiania procesu;
    • LABEL – dodaje metadane (np. zgodne z OCI).

    Optymalizacja obrazów i wieloetapowe budowanie

    Wieloetapowe budowanie (multi-stage) pozwala kompilować w etapie builder i kopiować artefakty do minimalnego runtime (np. Alpine lub scratch), co znacząco redukuje rozmiar.

    Dbaj o cache: kopiuj najpierw zależności (np. package.json) i instaluj je przed dodaniem reszty kodu, aby niepotrzebnie nie unieważniać wcześniejszych warstw. Korzystaj z .dockerignore, aby zredukować kontekst.

    Najlepsze praktyki bezpieczeństwa w Dockerfile

    Uruchamiaj procesy jako użytkownik nie-root (instrukcja USER) i używaj minimalnych baz. Nie umieszczaj sekretów w Dockerfile – przekaż je w runtime (secrets/ENV). Regularnie skanuj obrazy (np. Snyk) i aktualizuj zależności.

    Zarządzanie kontenerami i podstawowe operacje

    Poniższe polecenia przydadzą się w codziennej pracy z kontenerami:

    • docker run – tworzy i startuje kontener (np. -d w tle, -it interaktywnie);
    • docker ps – listuje działające kontenery (-a pokaże również zatrzymane, -q same ID);
    • docker stop/kill – łagodnie lub natychmiast zatrzymuje proces;
    • docker rm – usuwa kontenery (z -f w razie potrzeby);
    • docker exec – uruchamia proces w działającym kontenerze (np. /bin/bash);
    • docker logs – podgląd logów (-f śledzenie na żywo).

    Dla szybkiego debugowania użyj powłoki w kontenerze:

    docker run -it --rm --name debug --entrypoint /bin/sh alpine
    # lub, dla obrazu z bash:
    docker run -it --rm ubuntu /bin/bash

    Zarządzanie wolumenami i przechowywaniem danych

    Dane w kontenerze są efemeryczne – utrwalaj je w wolumenach lub bind mountach. Przydatne polecenia:

    docker volume create data
    docker volume ls
    docker volume inspect data

    # montowanie przy tworzeniu kontenera:
    docker run -d -v data:/app/data --name app myimage:1.0.0

    # bind mount (pełna ścieżka hosta):
    docker run -d -v /home/user/app:/app --name dev-app myimage:dev

    Docker Compose – orkiestracja aplikacji wielokontenerowych

    Docker Compose upraszcza start wielu usług, definiując je w pliku YAML wraz z sieciami, wolumenami i zależnościami.

    Struktura i składnia docker-compose.yml

    Najczęściej używane pola w definicji usługi to:

    • image/build – wskazuje obraz lub kroki budowania;
    • ports – mapowanie portów w formacie HOST:KONTENER;
    • environment/env_file – zmienne środowiskowe;
    • volumes – wolumeny i bind mounty;
    • restart – polityka restartu kontenera.

    Compose automatycznie tworzy sieć bridge, a usługi komunikują się po nazwach (wbudowany DNS). Zmienne i argumenty builda możesz dostarczyć przez env_file i args.

    Używanie Docker Compose do wdrażania aplikacji

    Podstawowe polecenia do pracy z Compose:

    # uruchomienie w trybie interaktywnym lub w tle:
    docker compose up
    docker compose up -d

    # skalowanie poziome:
    docker compose up --scale web=3 -d

    # zatrzymanie i usunięcie zasobów:
    docker compose down
    docker compose down --volumes # ostrożnie – usuwa dane

    # podgląd logów (na żywo):
    docker compose logs -f

    Konfiguracja sieci Dockera i komunikacja między kontenerami

    Różne sterowniki sieci odpowiadają różnym scenariuszom izolacji, wydajności i łączności. Poniżej praktyczne porównanie:

    Sterownik Izolacja Wydajność Typowe zastosowania
    bridge izolacja na hoście wysoka samodzielne aplikacje, lokalne usługi
    host brak izolacji sieciowej najwyższa monitoring, niskie opóźnienia, aplikacje sieciowe
    none pełna izolacja (brak sieci) — zadania offline, batch
    overlay między hostami średnia klastry (np. Docker Swarm)
    macvlan/ipvlan jak urządzenia w sieci LAN wysoka integracja z istniejącą infrastrukturą sieciową

    Publikacja i mapowanie portów

    Aby wystawić usługę poza hosta, zmapuj porty kontenera na porty hosta:

    # przykład: publikacja usługi HTTP na porcie 8080 hosta
    docker run -d -p 8080:80 --name web nginx:stable

    # EXPOSE dokumentuje porty w obrazie, ale ich nie publikuje:
    # publikacja następuje zawsze explicite przez -p lub w Compose (ports)

    Różnica między EXPOSE a -p: EXPOSE to dokumentacja w obrazie, a -p/[ports] faktycznie publikuje porty.

    Bezpieczeństwo Dockera i najlepsze praktyki produkcyjne

    Kieruj się zasadą najmniejszych uprawnień: minimalne obrazy, procesy bez roota, dostęp jedynie do niezbędnych zasobów.

    Uprawnienia użytkownika i izolacja procesów

    Procesy jako root w kontenerze zwiększają ryzyko. Twórz użytkownika nie-root (USER) i, gdy to możliwe, włącz user namespaces dla dodatkowej izolacji UID 0 od hosta.

    Ograniczenia zasobów i zarządzanie wydajnością

    Najważniejsze limity i ich rola:

    • –memory/-m – twardy limit pamięci (przekroczenie skutkuje OOM);
    • –memory-reservation – miękki limit preferencyjnego zużycia RAM;
    • –cpus – ogranicza łączny czas CPU dla kontenera;
    • –cpu-shares – względny priorytet CPU wobec innych kontenerów;
    • –cpuset-cpus – przypisanie do wybranych rdzeni CPU.

    Monitorowanie i logowanie

    Domyślny sterownik logów to json-file. Kontroluj rotację logów, aby uniknąć zapełnienia dysku, oraz rozważ alternatywy (syslog, Fluentd, chmura). Przydatne polecenia:

    docker logs -f --tail=200 NAZWA_KONTENERA
    docker stats
    # przykładowa konfiguracja rotacji (uruchomienie):
    docker run -d --log-driver=json-file --log-opt max-size=10m --log-opt max-file=5 myimage

    Zaawansowane zarządzanie obrazami i rejestry

    Konsekwentne tagowanie (np. semver) i praca z rejestrami upraszczają dystrybucję oraz rollbacki.

    Znaczenie tagów vs. etykiet (labels)

    Unikaj polegania na latest – taguj obrazy jawnie wersjami. Dodawaj LABEL, np. zgodne z OCI, aby utrwalić metadane obrazu.

    Publikacja obrazów i zarządzanie rejestrami

    Aby opublikować obraz do Docker Hub lub prywatnego rejestru, zaloguj się i wypchnij obraz:

    docker login
    docker tag myimage:1.2.3 myrepo/myimage:1.2.3
    docker push myrepo/myimage:1.2.3

    Wybieraj bazy z rodziny Docker Official Images lub obrazy utwardzone – regularnie łatane i skanowane.

    Oczyszczanie nieużywanych obrazów i zasobów

    Docker nie usuwa nieużywanych zasobów automatycznie. Poniższe polecenia pomogą utrzymać porządek:

    # całościowe sprzątanie (bez wolumenów):
    docker system prune -f

    # włącznie z wolumenami (nieodwracalne):
    docker system prune -a --volumes -f

    # selektywnie:
    docker image prune -a -f
    docker container prune -f
    docker volume prune -f
    docker network prune -f

    # z filtrami czasu:
    docker image prune -a --filter "until=24h"

    Rozwiązywanie problemów i debugowanie

    Szybka diagnoza i właściwa interpretacja błędów skracają czas naprawy i minimalizują przestoje.

    Typowe błędy instalacji i konfiguracji

    Komunikat o braku połączenia z demonem Dockera oznacza najczęściej, że usługa nie działa lub są problemy z uprawnieniami:

    Cannot connect to the Docker daemon

    sudo systemctl restart docker
    systemctl status docker
    journalctl -u docker --no-pager -n 200

    Odmowa dostępu bez sudo zwykle wskazuje na brak członkostwa w grupie docker lub konieczność odświeżenia sesji:

    Permission denied

    groups
    newgrp docker # lub wyloguj/zaloguj ponownie

    Diagnostyka problemów z kontenerami

    Do analizy niedziałających usług użyj logów i inspekcji konfiguracji:

    docker logs -f NAZWA_KONTENERA
    docker inspect NAZWA_KONTENERA | less

    Konflikt portów wykryjesz poleceniem sieciowym, a następnie zmienisz mapowanie:

    # sprawdź, kto używa portu:
    sudo ss -tulpen | grep :8080

    # zmień mapowanie na wolny port:
    docker run -d -p 8081:80 --name web nginx

    Braki pamięci (OOM) rozwiąż, zwiększając limity lub optymalizując aplikację:

    docker stats
    docker run -d --memory=512m --cpus=1 myimage

    Najlepsze praktyki debugowania

    W codziennej diagnostyce pomogą poniższe techniki:

    • interaktywny dostęp – docker exec -it NAZWA_KONTENERA /bin/bash;
    • porównanie stanu – docker diff (zmiany w systemie plików względem obrazu);
    • inspekcja konfiguracji – docker inspect (montowania, ENV, limity zasobów);
    • reprodukcja warunków – uruchamiaj z identycznymi zmiennymi, limitami i wolumenami.
    Norbert Barwicki
    • WWW

    Norbert Barwicki pracuje z systemami Linux od 2007 roku, kiedy to zainstalował swoją pierwszą dystrybucję Ubuntu 7.04. Przez lata eksperymentował z ponad 15 różnymi dystrybucjami, w tym Fedora, Debian, Arch Linux i Gentoo, a od 2015 roku specjalizuje się w administracji serwerami opartymi na CentOS i Red Hat Enterprise Linux. Jako certyfikowany administrator Linux (RHCSA od 2018 roku) dzieli się swoją wiedzą na Linuksowo.pl, gdzie opublikował już ponad 100 artykułów pomagających użytkownikom w przejściu na świat open source.

    Pozostałe poradniki

    Bizneswoman siedzi przy biurku, pokazując tablet na tle spadających niebieskich niewyraźnych liter

    Jak zainstalować i skonfigurować Nextcloud na własnym serwerze Linux

    10 min. czyt.
    Koncepcja protokołu sieci prywatnej wirtualnej (VPN) Ręka człowieka używająca tabletu cyfrowego z ikoną vpn na ekranie VR

    Jak skonfigurować zaporę sieciową UFW w Ubuntu – reguły, porty i zabezpieczenia

    8 min. czyt.

    Jak uruchomić pliki wykonywalne .bin i .run w Ubuntu?

    3 min. czyt.

    Linux SELKS – jak wspiera monitorowanie sieci i bezpieczeństwo? Instalacja, wdrożenie i funkcjonalności

    13 min. czyt.

    Unraid – jak zainstalować i skonfigurować dla serwera domowego i multimedialnego

    15 min. czyt.

    Linux RancherOS – jak ułatwia konteneryzację dzięki minimalistycznej architekturze

    15 min. czyt.
    Dodaj komentarz
    Odpowiedz Anuluj


    Poradniki
    Pojemnik na klawiaturowej ilustracji 3d

    Jak zainstalować i skonfigurować Docker na Ubuntu – konteneryzacja krok po kroku

    2026-07-18
    Mężczyzna programista pracujący na komputerze stacjonarnym z wieloma monitorami w biurze w firmie programistycznej. Technologie programowania i kodowania stron internetowych

    Jak monitorować ruch sieciowy w systemie Linux za pomocą narzędzia iftop

    2026-07-14
    black pencil on ruled notepad beside white ceramic mug and gray laptop computer

    Jak wybrać najlepszy edytor tekstu? Funkcje, bezpieczeństwo i popularne opcje

    2026-07-13
    white wireless keyboard

    Co to jest chroot? Konfiguracja, zalety i wady

    2026-06-30
    Artykuły
    Młody chłopak wypróbowuje drona, podczas gdy młoda dziewczyna pracuje na tablecie

    Jak uruchamiać gry na Linuksie za pomocą Steam i Proton – poradnik gracza

    2026-06-27
    Flaga Ukrainy w tle i komunikat „Brak wojny” na cyfrowym ekranie Wojna z Rosją Sankcje cybernetyczne upadek gospodarczy Wiadomość dla pokoju na świecie

    Co to jest SELinux i jak poprawia bezpieczeństwo systemu Linux?

    2026-06-19
    Kłódka i laptop z polem hasła. Pojęcia dotyczące prywatności informacji i bezpieczeństwa cybernetycznego

    Jak skonfigurować klucze SSH i wyłączyć logowanie hasłem na serwerze Linux

    2026-05-09
    O Linuksowo

    Linuksowo.pl to kompendium wiedzy dla wszystkich zainteresowanych systemami operacyjnymi opartymi na jądrze Linux. Oferujemy eksperckie artykuły obejmujące dystrybucje, instalację, bezpieczeństwo oraz oprogramowanie open source. Naszym celem jest dostarczanie praktycznych porad zarówno dla początkujących, jak i zaawansowanych użytkowników.

    © 2026 Linuksowo – Wszelkie prawa zastrzeżone.
    • Strona główna
    • O Linuksowo
    • Polityka prywatności i cookies
    • RSS
    • Kontakt

    Type above and press Enter to search. Press Esc to cancel.