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
Niezmenny szablon zawierający aplikację i zależności — blueprint dla kontenerów
Uruchomiona instancja image — izolowany process z własnym filesystemem i siecią
Przepis na zbudowanie image — lista instrukcji wykonywanych podczas docker build
Repozytorium przechowujące i dystrybuujące Docker images
Narzędzie do definiowania multi-container aplikacji w pliku YAML
Mechanizm persystencji danych poza cyklem życia kontenera
Izolowana sieć łącząca kontenery — komunikacja przez nazwy kontenerów
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).
Powiązane artykuły
Skontaktuj się z nami
Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.
Wyślij zapytanie
Telefon
+48 790 814 814
Pon-Pt: 9:00 - 18:00
adam@fotz.pl
Odpowiadamy w ciągu 24h
Adres
Plac Wolności 16
61-739 Poznań
Godziny pracy
Wolisz porozmawiać?
Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.
Zadzwoń teraz