»Deluje na mojem računalniku« je izgovor za leto 2026, ki ga nihče ne sprejema. Docker rešuje to težavo – vsak razvijalec uporablja isto okolje, uvajanja so ponovljiva, odvisnosti so izolirane. To je praktičen vodnik o tem, kaj je Docker, kdaj ga uporabiti in kako začeti s projekti PHP/Node/Laravel/Craft.
Kaj je Docker?
Docker = kontejnerizacija. Aplikacija + vse odvisnosti (knjižnice operacijskega sistema, izvajalno okolje, konfiguracija) so zapakirane v sliko . Slika se zažene kot kontejner – izoliran proces na gostiteljskem strežniku.
Vsebnik ni virtualni stroj. Jedro si deli z gostiteljem, vendar so datotečni sistem, omrežje in procesni prostor izolirani.
Osnovni pojmi
- Slika — predloga (npr.
php:8.2-fpm). Samo za branje. - Vsebnik — primerek slike, proces, ki se izvaja.
- Dockerfile — navodila za gradnjo slike.
- docker-compose.yml — definira aplikacijo z več vsebniki (splet + baza podatkov + Redis + čakalna vrsta).
- Prostornina – trajna shramba zunaj vsebnika.
- Omrežje – virtualno omrežje za komunikacijo med vsebniki.
- Register — kjer so shranjene slike (Docker Hub, GitHub Container Registry, samostojno gostovanje).
Zakaj uporabljati Dockerja?
- Reproducibilno razvojno okolje – vsi razvijalci uporabljajo enake različice PHP/Node/MySQL. Brez "pri meni deluje".
- Uvajanje novih razvijalcev —
git clone && docker-compose up, končano. Nastavitev XAMPP-ja ne traja 4 ure. - Več projektov, različne različice PHP – projekt A na PHP 8.1, projekt B na PHP 8.3. Brez konfliktov.
- Produkcijska pariteta – razvojni vsebnik je enak produkcijskemu. Manj presenetljivih napak.
- Mikroservisi – vsaka storitev v svojem vsebniku, neodvisno uvajanje.
- CI/CD – GitHub Actions, GitLab CI, Drone – vsi izvorno uporabljajo Docker.
Praktična postavitev — projekt Laravel
Dockerfile
FROM php:8.2-fpm-alpine RUN apk add --no-cache \ libpng-dev libzip-dev mysql-client \ && docker-php-ext-install pdo_mysql gd zip bcmath COPY --from=composer:latest /usr/bin/composer /usr/bin/composer WORKDIR /var/www COPY . . RUN composer install --no-dev --optimize-autoloader CMD ["php-fpm"]docker-compose.yml
version: '3.8' services: app: build: . volumes: - .:/var/www depends_on: [db, redis] environment: DB_HOST: db REDIS_HOST: redis nginx: image: nginx:alpine ports: ['8080:80'] volumes: - .:/var/www - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: [app] db: image: mariadb:11 environment: MYSQL_DATABASE: laravel MYSQL_ROOT_PASSWORD: secret volumes: - dbdata:/var/lib/mysql redis: image: redis:alpine volumes: dbdata:Začetek
docker-compose up -d docker-compose exec app php artisan migrate docker-compose exec app php artisan key:generate Spletno mesto na http://localhost:8080 . Ustavi: docker-compose down .
Laravel Sail — Docker za lene
Laravel Sail = ponudnik storitev, ki vključuje Docker v Laravel projekt z enim samim ukazom. Skript ./vendor/bin/sail obdaja docker-compose:
composer require laravel/sail --dev php artisan sail:install ./vendor/bin/sail up -d ./vendor/bin/sail artisan migrateIdealno za hiter začetek novih projektov.
DDEV — Docker za Drupal/WP/Craft
DDEV je preverjen Dockerjev ovoj za razvoj CMS. Nastavitev novega Craft projekta v 5 minutah:
ddev config --project-type=craftcms ddev start ddev composer install ddev craft installPlus: vnaprej konfiguriran PHP/MySQL/nginx, mkcert za HTTPS, mailhog za testiranje e-pošte, phpMyAdmin.
Zvezki – trajni podatki
- Bind mount (
.:/var/www) — imenik na gostitelju, nameščen v vsebniku. Spremembe so vidne takoj. Idealno za razvijalce. - Poimenovani nosilec (
dbdata::) – Docker upravlja shrambo. Idealno za baze. - Anonimni nosilec – ustvarjen ad-hoc. Izbrisan, ko vsebnik izgine.
Omrežja
Vsebniki v istem docker-compose si delijo privzeto omrežje. Do njih se dostopa prek imena storitve (npr. db , redis ) kot prek DNS-a.
Omrežja po meri za izolacijo:
networks: frontend: backend: services: app: networks: [frontend, backend] db: networks: [backend] # db nije dostupan iz frontendDocker v produkciji
Razvojni kontejner je eno, produkcija pa nekaj drugega. Vprašanja:
- Orkestracija: en strežnik (docker-compose), Docker Swarm (osnovno), Kubernetes (polno).
- Register slik: Docker Hub (javni), GitHub Container Registry, GitLab Registry, samostojno gostovanje Harbor.
- Upravljanje skrivnosti: Docker Secrets (Swarm) ali Vault.
- Beleženje: gonilnik loki, datoteka json z rotacijo, agent Datadog.
- Spremljanje: Izvoznik Prometheus na kontejnerjih.
- Uvajanje brez izpadov: posodobitev Swarm, uvajanje K8s, modro-zelena z nginx stikalom za nadgradnjo.
Vzorci Dockerfile produkcijske kakovosti
Večstopenjska gradnja
FROM node:20-alpine AS frontend-build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM php:8.2-fpm-alpine WORKDIR /var/www COPY composer.* ./ RUN composer install --no-dev COPY . . COPY --from=frontend-build /app/public/build ./public/buildSamo končna slika izvajalnega okolja PHP + vgrajena gradiva. Brez vozlišča, brez izvorne kode za gradnjo na frontendu.
Nekorenski uporabnik
RUN addgroup -g 1000 app && adduser -G app -u 1000 -D app USER appVarnost: vsebnik se ne izvaja kot root.
.dockerignore
.git node_modules vendor storage/logs/* .env .env.examplePreprečuje, da bi se lokalne razvojne datoteke znašle v sliki.
Pogoste pasti
- Velikost slike: privzeta slika PHP je ~400 MB. Različica Alpine ~60 MB. Večstopenjska izvedba še bolj zmanjša velikost.
- Dovoljenja za datoteke: UID vsebnika in UID gostitelja se ne ujemata, težave pri pisanju. Nastavite ujemanje UID/GID.
- Počasno v sistemu macOS: povezovalne povezave so v sistemu macOS počasnejše. Uporabite
:cachedali:delegatedali dev v Mutagen. - Zastareli predpomnilnik: ko spremenite datoteko Dockerfile, vendar Docker uporablja predpomnilnik.
docker-compose build --no-cache. - Kontejnerji se ne ustavijo:
docker-compose down -vza čisto ponastavitev (izbriše tudi nosilce podatkov). - Konflikt vrat: vrata 80 na gostitelju zaseda Apache/MySQL. Preslikajte druga vrata (
8080:80).
Alternativa Docker Composeu — Podman
Podman je Red Hatova alternativa Dockerju brez roota. Združljiv z Dockerjevim ukaznim vmesnikom (CLI) in Compose. Varnejša privzeta nastavitev, boljša izolacija. Vedno bolj priljubljen za produkcijo Linuxa.
Kdaj NE uporabljati Dockerja
- Preprosto statično spletno mesto – pretirano.
- PHP skripto hitro razvijete lokalno brez baze podatkov – XAMPP/MAMP je hitrejši.
- Gostovanje, ki ne podpira Dockerja (večinoma deljeno) – produkcijo nastavite na golo kovino.
- Ekipa, ki ne pozna Dockerja – krivulja učenja je zamudna. Če je ekipa majhna, je boljša neposredna uvedba.
Gostovanje Dockerja
- VPS z Dockerjem: najcenejši, popoln nadzor.
- Upravljano gostovanje kontejnerjev: AWS ECS, Google Cloud Run, Fly.io, Railway, Render.
- Upravljano s Kubernetesom: GKE, EKS, DigitalOcean Kubernetes, upravljano s strani OVH.
- Samostojno gostovani K8: kompleksni, samo za resne primere uporabe.
Gostovanje WMD in Docker
WMD ponuja VPS, pripravljen za Docker, in namenske strežnike z vnaprej nameščenim Dockerjem in Docker Composejem. Vzpostavili smo cevovod CI/CD (GitHub Actions ali Gitea Actions) za samodejno gradnjo in uvajanje na strežnik ob objavi. Samostojno gostovan register slik (Harbor ali Gitea Container Registry). Varnostne kopije so vključene v JetBackup. Za poslovne stranke s potrebami K8s svetujemo in konfiguriramo upravljane Kubernetes ali samostojno gostovanje (k3s, RKE2). Lokalna namestitev DDEV ali Laravel Sail za nove WP/Craft/Laravel projekte, vključene v onboarding.
Pogosta vprašanja
Docker ali Vagrant? Docker – sodobnejši, lažji, hitrejši. Vagrant je manj priljubljen za nove projekte.
Alternativa Docker Desktop za macOS/Windows? Rancher Desktop, OrbStack (macOS), Podman Desktop. Vsi brezplačni in v nekaterih pogledih boljši od Docker Desktopa.
Ali lahko imam Dockerjev vsebnik z aplikacijo GUI? Tehnično da (posredovanje X11), praktično je izvorna namestitev boljša.
Se Kubernetes splača za moj projekt? Če imate več kot 50 storitev ali veliko število storitev – da. Če imate en WP + DB + Redis – je pretirano.
Ali je velikost slike pomembna? Da – manjša slika = hitrejši prevzem = hitrejša namestitev. Alpine + večstopenjski sistem = majhne slike.
Potrebujete nastavitev Dockerja za projekt ali produkcijsko uvajanje? WMD nastavi razvojno okolje Dockerja + CI/CD + produkcijski strežnik. Stopite v stik z nami prek kontaktnega obrazca .