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).

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 rejestrowy

Poznańska 117/11

62-023 Kamionki · obsługa zdalna

Godziny pracy

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

Wolisz porozmawiać?

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

Zadzwoń teraz