Docker — co to jest i jak działa konteneryzacja?

    Docker eliminuje problem "works on my machine" — aplikacja z zależnościami działa identycznie wszędzie. Poznaj kontenery, Dockerfile i Docker Compose.

    Czym jest Docker?

    Docker to platforma do budowania i uruchamiania aplikacji w kontenerach. Kontener to izolowana jednostka uruchomieniowa zawierająca aplikację i wszystkie jej zależności — działa tak samo na każdym systemie z Dockerem.

    Kontenery są znacznie lżejsze niż maszyny wirtualne — startują w sekundy, zajmują megabajty (nie gigabajty). Docker stał się standardem branżowym dla local development, CI/CD i produkcji (Kubernetes).

    7 kluczowych pojęć Docker

    Image

    Niezmenny szablon zawierający aplikację i zależności — blueprint dla kontenerów

    docker build -t myapp:1.0 .ubuntu:22.04, nginx:alpine, node:18-slim
    Container

    Uruchomiona instancja image — izolowany process z własnym filesystemem i siecią

    docker run -p 3000:3000 myapp:1.0Działająca instancja aplikacji Node.js
    Dockerfile

    Przepis na zbudowanie image — lista instrukcji wykonywanych podczas docker build

    docker build -f Dockerfile .FROM node:18 → COPY → RUN npm install → CMD
    Registry

    Repozytorium przechowujące i dystrybuujące Docker images

    docker push myregistry/myapp:1.0Docker Hub, AWS ECR, Google GCR, GitHub GHCR
    Docker Compose

    Narzędzie do definiowania multi-container aplikacji w pliku YAML

    docker compose up -dapp + postgres + redis + nginx w jednej komendzie
    Volume

    Mechanizm persystencji danych poza cyklem życia kontenera

    docker run -v myvolume:/data myappBaza danych która przeżywa restart kontenera
    Network

    Izolowana sieć łącząca kontenery — komunikacja przez nazwy kontenerów

    docker network create mynetapp container komunikuje się z db container przez 'db:5432'

    Przykład Dockerfile — multi-stage build

    Multi-stage build minimalizuje rozmiar production image — osobny etap dla buildowania i uruchomienia.

    # Multi-stage build — optymalizacja rozmiaru image
    FROM node:18-alpine AS builder
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci --only=production
    COPY . .
    RUN npm run build
    
    # Production image — tylko to co potrzebne
    FROM node:18-alpine AS production
    WORKDIR /app
    COPY --from=builder /app/dist ./dist
    COPY --from=builder /app/node_modules ./node_modules
    EXPOSE 3000
    USER node
    CMD ["node", "dist/server.js"]

    6 best practices Docker

    Multi-stage builds

    Używaj wielu etapów build — osobny builder (z dev tools) i production image (tylko runtime). Redukcja rozmiaru image o 50-90%.

    Alpine base images

    Używaj lightweight base images (node:18-alpine zamiast node:18). Alpine Linux to ~5MB vs ~100MB+ dla full OS.

    .dockerignore

    Zawsze twórz .dockerignore wykluczający node_modules, .git, .env, logi. Przyspiesza build i zmniejsza image.

    Non-root user

    Uruchamiaj aplikację jako non-root user (USER node) — security best practice, ogranicza blast radius kompromitacji.

    Layer caching

    Kopiuj package.json przed kodem źródłowym (COPY package*.json ./ → RUN npm install → COPY . .) — zmiany kodu nie invalidują cache npm.

    Read-only filesystems

    Gdzie możliwe, uruchamiaj z --read-only flag — kontener nie może modyfikować własnego filesystemu.

    FAQ — Docker i konteneryzacja

    Co to jest Docker?

    Docker to platforma do budowania, uruchamiania i dystrybucji aplikacji w kontenerach. Kontener to lekka, izolowana jednostka uruchomieniowa zawierająca aplikację i wszystkie jej zależności (biblioteki, środowisko uruchomieniowe, konfigurację) — gwarantując identyczne działanie niezależnie od środowiska. 'Works on my machine' to problem przeszłości — Docker kontener działa tak samo na laptopie dewelopera, CI/CD i produkcji.

    Czym różni się kontener Docker od maszyny wirtualnej (VM)?

    Maszyna wirtualna (VM) wirtualizuje cały hardware i uruchamia osobny system operacyjny — ciężka, wolna (minuty startowania), zajmuje gigabajty. Kontener Docker dzieli kernel hosta, wirtualizuje tylko przestrzeń procesów i systemu plików — lekki (sekundy startowania), megabajty. Kontenery uruchamiają się 10-100x szybciej i zużywają znacznie mniej zasobów. Jednak VM zapewnia silniejszą izolację (osobny kernel) — używana tam gdzie security isolation jest krytyczna.

    Co to jest Dockerfile?

    Dockerfile to plik tekstowy z instrukcjami do budowania Docker image — przepis na kontener. Kluczowe instrukcje: FROM (base image), WORKDIR (katalog roboczy), COPY/ADD (kopiowanie plików), RUN (wykonanie komend podczas buildu), EXPOSE (deklaracja portów), ENV (zmienne środowiskowe), CMD/ENTRYPOINT (komenda uruchamiana przy starcie kontenera). Dockerfile jest wersjonowany razem z kodem — każda zmiana w konfiguracji jest śledzalna.

    Co to jest Docker Compose?

    Docker Compose to narzędzie do definiowania i uruchamiania aplikacji złożonych z wielu kontenerów — za pomocą pliku YAML (docker-compose.yml). Pozwala na jedną komendę uruchomić całe środowisko: aplikacja + baza danych + cache (Redis) + reverse proxy (Nginx). Używany głównie w development (lokalne środowisko) i testing. Na produkcji zazwyczaj zastępuje go Kubernetes dla skalowalności i zarządzania clusterem.

    Jaka jest różnica między Docker image a Docker container?

    Docker image to niezmenny szablon/blueprint — zawiera kod aplikacji, biblioteki, konfigurację. Jest jak przepis. Docker container to uruchomiona instancja image — działający proces. Z jednego image możesz uruchomić wiele kontenerów równolegle. Image jest read-only, container dodaje na wierzch read-write layer dla zmian podczas działania. Image budujesz (docker build), uruchamiasz jako container (docker run), dystrybuujesz przez registry (Docker Hub, ECR, GCR).

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz