Docker na Raspberry Pi-u omogućuje pokretanje više servisa (web, DNS, monitoring, baze) u izoliranim kontejnerima bez sukoba ovisnosti na hostu. Za homelab i male SMB setupove to je često brži put od ručne instalacije svakog paketa, uz uvjet da birate slike koje postoje za ARM (arm64/aarch64 na Pi 4/5) i da pinate verzije.
Ako tek gradite kućni server, krenite od Raspberry Pi kao home server. Kad stack preraste „jedan kontejner“, produkcijska disciplina Composea je u Docker Compose u produkciji; za TLS i ulazni proxy na VPS-u vidi Traefik reverse proxy.
Što je Docker?
Docker pakira aplikaciju i ovisnosti u kontejner koji dijeli kernel s hostom. Lakši je od VM-a, brže se pokreće, a izolacija olakšava upgrade i rollback.
Zašto na Raspberry Pi-u
- Izolacija: servisi ne dijele iste sistemske pakete
- Ponovljivost: isti
compose.ymlna drugom Pi-u ili VPS-u - Više servisa: Nginx, Pi-hole, Portainer… bez ručnog sukoba porta i biblioteka
- Manji footprint od potpunih virtualnih mašina
ARM napomena: nije svaka Docker Hub slika dostupna za linux/arm64 ili linux/arm/v7. Prije docker pull provjerite multi-arch / platform oznaku. Alpine i službene slike (nginx, mariadb, wordpress) obično imaju arm64; neke „amd64-only“ slike na Pi-u jednostavno neće raditi.
Instalacija Dockera
Ažurirajte sustav, zatim službena instalacijska skripta (instalira Docker Engine + Compose plugin v2):
sudo apt update
sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
sudo systemctl enable --now docker
newgrp docker
Compose v2 dolazi kao plugin: naredba je docker compose (razmak), ne stari apt paket docker-compose (crtica). Ne instalirajte v1 paket osim ako imate legacy razlog.
Provjera
docker --version
docker compose version
docker run --rm hello-world
Osnovne Docker naredbe
# Preuzimanje slike (pinnana verzija)
docker pull nginx:1.27-alpine
docker images
docker run -d -p 8080:80 --name moj-nginx nginx:1.27-alpine
docker ps
docker ps -a
docker stop moj-nginx
docker start moj-nginx
docker rm moj-nginx
docker rmi nginx:1.27-alpine
docker logs moj-nginx
docker exec -it moj-nginx /bin/sh
Primjer: Nginx web server
mkdir -p ~/my-website
cd ~/my-website
echo "<h1>Dobrodošli na moj Raspberry Pi!</h1>" > index.html
docker run -d \
--name web-server \
-p 8080:80 \
-v ~/my-website:/usr/share/nginx/html:ro \
--restart unless-stopped \
nginx:1.27-alpine
Stranica: http://raspberrypi.local:8080 (ili IP Pi-a).
Docker Compose v2
Compose opisuje više servisa u jednoj YAML datoteci. Ključna riječ version: na vrhu datoteke više nije potrebna u Compose specifikaciji v2+; izostavite je.
Primjer: WordPress + MariaDB
Datoteka compose.yml:
services:
db:
image: mariadb:11.4
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: change-me-root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: change-me-wp
restart: unless-stopped
wordpress:
depends_on:
- db
image: wordpress:6.7-php8.2-apache
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: change-me-wp
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
restart: unless-stopped
volumes:
db_data:
wordpress_data:
docker compose up -d
docker compose ps
docker compose logs -f wordpress
Promijenite lozinke prije produkcije. Za restart policy, healthcheckove i tajne na VPS-u: Compose u produkciji.
Korisni kontejneri (ARM-friendly)
1. Pi-hole
docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 8081:80 \
-e TZ="Europe/Zagreb" \
-e WEBPASSWORD="jakalozinka" \
-v pihole_data:/etc/pihole \
-v dnsmasq_data:/etc/dnsmasq.d \
--restart=unless-stopped \
pihole/pihole:2024.07.0
Provjerite da port 53 nije zauzet drugim DNS-om na Pi-u. Tag ažurirajte prema Docker Hubu; pinajte verziju, ne :latest.
2. Portainer CE
docker run -d \
-p 9000:9000 \
--name portainer \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:2.21.4
3. Grafana
docker run -d \
-p 3000:3000 \
--name grafana \
-v grafana_data:/var/lib/grafana \
--restart unless-stopped \
grafana/grafana:11.2.0
Održavanje
docker container prune
docker image prune
docker volume prune
docker system df
# oprezno: briše nekorištene slike
docker system prune -a
docker compose pull
docker compose up -d
Najbolje prakse na Pi-u
- Pinajte tagove (
nginx:1.27-alpine), ne:latest - Volume-i za podatke koji moraju preživjeti recreate kontejnera
- restart: unless-stopped za 24/7 servise
- ARM: testirajte pull prije nego što ovisite o slici u produkciji
- SD vs SSD: I/O i trajnost bolji na USB SSD-u
- RAM: Pi 4/5 s 4GB+ za više kontejnera; Pi 3 za 2–4 lagana servisa
Zaključak
Docker + Compose v2 pretvara Raspberry Pi u ponovljiv homelab host. Sljedeći koraci: kućni server setup, Compose disciplina na VPS-u, i reverse proxy kad servise izložite vani.
Ako trebate pomoć oko stacka na Pi-u ili VPS-u, DevOps usluge.
Česta pitanja
Može li Raspberry Pi 3 pokretati Docker?
Da, ali s manje RAM-a. Pi 4/5 s 4GB+ razumniji je za više kontejnera.
Hoće li Docker usporiti Pi?
Overhead je mali jer dijele kernel. Usko grlo obično je SD kartica i RAM, ne sam Docker.
Gdje su podaci?
Engine podaci u /var/lib/docker; trajni podaci aplikacija držite u named volumeima ili bind mountovima koje backupirate.