Docker je revolucionirao način na koji razvijamo i pokrećemo aplikacije. Umjesto da instalirate sve biblioteke i ovisnosti direktno na sustav, Docker omogućuje da svaka aplikacija radi u svom izoliranom kontejneru. To znači - nema više sukoba verzija, lakše upravljanje, i mogućnost pokretanja desetaka servisa na jednom Raspberry Pi-u!
Što je Docker?
Docker je platforma za kontejnerizaciju koja omogućuje pakiranje aplikacija zajedno sa svim ovisnostima u lagane, prenosive kontejnere. Zamislite kontejner kao mali, samostalan operativni sustav koji sadrži samo ono što vaša aplikacija treba.
Prednosti Dockera na Raspberry Pi-u
- Izolacija: Svaka aplikacija radi u svom okruženju
- Jednostavnost: Instalacija složenih aplikacija svodi se na jednu naredbu
- Portabilnost: Kontejneri rade jednako na svim platformama
- Sigurnost: Kontejneri su izolirani od glavnog sustava
- Efikasnost resursa: Dijele kernel OS-a, troše manje memorije od virtualnih mašina
Instalacija Dockera
Prvo osigurajte da imate najnoviju verziju Raspberry Pi OS-a:
sudo apt update
sudo apt upgrade -y
Automatska Instalacija (Preporučeno)
Docker ima jednostavnu instalacijsku skriptu:
# Preuzmite i pokrenite instalacijsku skriptu
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Dodajte trenutnog korisnika u docker grupu (ne trebaćete sudo)
sudo usermod -aG docker $USER
# Omogućite Docker da se pokreće automatski
sudo systemctl enable docker
# Restartirajte terminal ili se ponovno prijavite
newgrp docker
Provjera Instalacije
# Provjerite verziju
docker --version
# Pokrenite test kontejner
docker run hello-world
Ako vidite poruku "Hello from Docker!", uspješno ste instalirali Docker!
Osnovne Docker Naredbe
Najvažnije naredbe koje trebate znati:
# Preuzimanje slike (image)
docker pull nginx
# Prikaz svih slika
docker images
# Pokretanje kontejnera
docker run -d -p 8080:80 --name moj-nginx nginx
# Prikaz pokrenutih kontejnera
docker ps
# Prikaz svih kontejnera (uključujući zaustavljene)
docker ps -a
# Zaustavljanje kontejnera
docker stop moj-nginx
# Pokretanje zaustavljen og kontejnera
docker start moj-nginx
# Brisanje kontejnera
docker rm moj-nginx
# Brisanje slike
docker rmi nginx
# Pregled logova kontejnera
docker logs moj-nginx
# Pristup shell-u unutar kontejnera
docker exec -it moj-nginx /bin/bash
Praktičan Primjer: Nginx Web Server
Pokrenimo jednostavan web server:
# Stvorite direktorij za web stranicu
mkdir ~/my-website
cd ~/my-website
echo "Dobrodošli na moj Raspberry Pi!" > index.html
# Pokrenite Nginx s vašom stranicom
docker run -d \
--name web-server \
-p 8080:80 \
-v ~/my-website:/usr/share/nginx/html:ro \
nginx:alpine
Sada možete pristupiti stranici na http://raspberrypi.local:8080
Docker Compose: Upravljanje Više Kontejnera
Docker Compose omogućuje definiranje višekontejnerskih aplikacija u jednoj datoteci.
Instalacija Docker Compose
sudo apt install docker-compose -y
Primjer: WordPress s Bazom Podataka
Stvorite docker-compose.yml:
version: '3'
services:
db:
image: mariadb:10
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
restart: always
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
restart: always
volumes:
db_data:
wordpress_data:
Pokrenite stack:
docker-compose up -d
WordPress će biti dostupan na http://raspberrypi.local:8080
Korisni Kontejneri za Raspberry Pi
1. Pi-hole - Bloker Reklama za Cijelu Mrežu
docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 80:80 \
-e TZ="Europe/Zagreb" \
-e WEBPASSWORD="mojalozinka" \
-v pihole_data:/etc/pihole \
-v dnsmasq_data:/etc/dnsmasq.d \
--restart=unless-stopped \
pihole/pihole:latest
2. Portainer - GUI za Upravljanje Dockerom
docker run -d \
-p 9000:9000 \
--name portainer \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Pristup: http://raspberrypi.local:9000
3. Grafana - Vizualizacija Podataka
docker run -d \
-p 3000:3000 \
--name grafana \
-v grafana_data:/var/lib/grafana \
--restart unless-stopped \
grafana/grafana:latest
Održavanje i Čišćenje
Docker može zauzeti puno prostora. Redovno čišćenje je važno:
# Ukloni sve zaustavljene kontejnere
docker container prune
# Ukloni nekorištene slike
docker image prune
# Ukloni nekorištene volumene
docker volume prune
# Ukupno čišćenje (oprezno!)
docker system prune -a
# Provjera prostora
docker system df
Najbolje Prakse
- Uvijek koristite specifične verzije slika (npr.
nginx:1.21umjestonginx:latest) - Koristite volume-e za podatke koji trebaju ostati nakon brisanja kontejnera
- Postavite restart policy za kontejnere koji trebaju raditi stalno
- Koristite docker-compose za složenije aplikacije
- Redovno ažurirajte slike:
docker-compose pull && docker-compose up -d
Performanse na Raspberry Pi-u
Docker radi odlično na Raspberry Pi-u, ali postoje neka ograničenja:
- Koristite alpine verzije slika gdje god je moguće (manje, brže)
- Raspberry Pi 4 s 4GB+ RAM-a je preporučen za više kontejnera
- Koristite SSD umjesto microSD kartice za bolje performanse I/O
- Pazite na ARM arhitekturu - ne sve slike rade na Pi-u
Zaključak
Docker pretvara Raspberry Pi u moćnu platformu za self-hosting. Sada možete pokrenuti više servisa bez brige o sukobima ovisnosti. Od web servera do home automation sustava - sve je moguće s nekoliko naredbi!
U sljedećim člancima pokazat ću konkretne projekte koje možete pokrenuti na vašem Dockeriziranom Raspberry Pi-u. Stay tuned!
Česta Pitanja
Može li Raspberry Pi 3 pokretati Docker?
Da, ali je Pi 4 s više RAM-a preporučen za više kontejnera. Pi 3 radi odlično za 3-5 laganih kontejnera.
Hoće li Docker usporiti moj Pi?
Ne, Docker kontejneri dijele kernel s OS-om i vrlo su efikasni. Često su brži od "native" instalacija jer su optimizirani.
Gdje se spremaju Docker podaci?
Po defaultu u /var/lib/docker. Volume-i omogućuju trajno spremanje podataka neovisno o kontejnerima.