Docker i Linux kao podloga

Lokalne web-servise, osim kao nativne Windows programe, možete pokretati i kao Linux programe unutar "kontejnera" pomoću Dockera, što ima svoje prednosti i nedostatke

Mario Baksa srijeda, 30. rujna 2026. u 06:00

Docker je fantastičan alat, ili možda bolje reći vrsta alata ili sustav za pokretanje aplikacija u kontejnerima (container), koje su definirane standardom OCI (Open Container Initiative). U pravilu se radi o Linux aplikacijama zapakiranima s dijelom (userspaceom) neke mini distribucije Linuxa (često Alpine Linux). Slijedom toga, kontejneriziranim aplikacijama u pravilu treba Linux kernel (jezgra operacijskog sustava), odnosno moraju se upogoniti pod Linuxom. Ako imate računalo ili server s Linuxom, to je to - one će koristiti kernel instaliranog Linuxa.

Iako većina vas i dalje koristi Windowse, to ne znači da ne možete koristiti Docker, odnosno kontejnerizirane aplikacije. Windowsi nude WSL (Windows Subsystem for Linux), u sklopu kojeg se isporučuje i Microsoftova modificirana verzija Linux kernela. Taj se Microsoftov Linux kernel pod Windowsima može iskoristiti za pokretanje kontejneriziranih aplikacija.

WSL vam inače omogućava da unutar njega instalirate neku od dvadesetak laganijih distribucija ili inačica Linuxa te da pod Windowsima koristite Linux - terminalske aplikacije, shell poput basha pa čak i neke GUI Linux aplikacije. Docker Desktop je GUI aplikacija za Docker, koja vam omogućava i spajanje na neku od instaliranih distribucija Linuxa, ako Docker želite koristiti iz nje.

Dosad smo prešutjeli da postoje i Docker aplikacije koje trebaju Windowsov kernel. To je zato jer za većinu korisnika odnosno većinu kontejneriziranih aplikacija Docker podrazumijeva Linux platformu. To vrijedi i kad se koristi unutar neke punokrvne instalacije Linuxa, i kad se vrti u virtualiziranoj instalaciji Linuxa, kao što je to slučaj s WSL-om. Stoga se Windows kontejnerima nećemo baviti - gotovi Windows imagei kontejneriziranih aplikacija u pravilu su samo neke aplikacije specifične za Windowse. Slobodno zaboravite da to postoji.

Docker aplikacije svuda oko nas

Usput rečeno, ako ste koristili kakav imalo napredniji NAS (Network Attached Storage), recimo Synologyev, Ugreenov ili custom rješenje temeljeno na TrueNAS-u ili ZimaOS-u, te u njemu imali mogućnost instalacija aplikacija - to su upravo te kontejnerizirane Linux aplikacije koje asociramo s Dockerom! Ili Podmanom, Red Hatovom alternativom za Docker. Znači, tipično to nisu nekakve specijalne aplikacije napravljene za tu neku specifičnu platformu, nego su to "umotane" Linux aplikacije. A NAS-ov softver tipično ponudi svoju trgovinu takvih aplikacija i na neki način korisnicima obično olakša instaliranje aplikacija - ponudi sučelje, umjesto petljanja po konfiguracijskim datotekama. Pojednostavljenu instalaciju drugih aplikacija u Docker Desktop kojeg biste pokretali pod Windowsima možete dobiti aplikacijom Portainer (prvo je nju potrebno instalirati u Docker, a onda se ostale aplikacije instaliraju kroz nju).

ZimaOS jedan je od jednostavnijih OS-eva za NAS uređaje - podloga je Linux, a aplikacije koje možete instalirati u njega preko njegovog App Storea zapravo su Docker aplikacije, odnosno OCI aplikacije
ZimaOS jedan je od jednostavnijih OS-eva za NAS uređaje - podloga je Linux, a aplikacije koje možete instalirati u njega preko njegovog App Storea zapravo su Docker aplikacije, odnosno OCI aplikacije

Sve ovo ujedno znači da praktički sve što opisujemo u ovoj temi broja primjenjivo je i na Linuxu, a time i u Dockeru, uz određene modifikacije. Glavni razlog zbog kojeg sve ovo demonstriramo pod Windowsima je što većina vas još uvijek koristi Windowse pa da si tu ne nabacite na leđa još i učenje rada s Linuxom. No, pokazat ćemo vam i kako koristiti Docker, da eventualno u Docker prebacite Windows programe kojih smo se dotakli u temi. Također, da znate barem okvirno kako pristupiti instalaciji programa koji nemaju Windows verzije, ali postoje kao kontejnerizirane aplikacije za Docker.

U nastavku možete pročitati kako AdGuard Home, kojeg ste instalirali kao Windows servis ako ste slijedili naše upute, prebaciti u Dockerov ekosustav, odnosno da ga koristite kao kontejneriziranu aplikaciju koju pokreće Docker. U odvojenom okviru pokazujemo i kako instalirati cloud servis Nextcloud s Euro-Officeom, a po sličnim principima možete instalirati i gomilu drugih Docker aplikacija. Primjerice, Immich je fantastična zamjena za Google Photos, LinkWarden je vrlo koristan za čuvanje linkova, Paperless-ngx za katalogizaciju PDF dokumenata, BentoPDF za uređivanje PDF dokumenata, RetroAssembly za igranje igara sa starih konzola...

Prebacivanje AdGuarda Home u Docker

Najbolje bi bilo da si prvo stvorite jednu mapu za Docker aplikacije pa da sve imate na jednoj hrpi. Neka to bude c:\docker. U njoj kreirajte podmapu AdGuardHome, u kojoj će biti AdGuard Home. Kreirajte i podmapu conf unutar mape AdGuardHome te u nju iskopirajte AdGuardovu konfiguracijsku datoteku. Naime, nakon što ste podesili i upogonili AdGuard Home, on je postavke spremio u datoteku AdGuardHome.yaml, koju sad možemo iskoristiti. Dakle, datoteku c:\AdGuardHome\AdGuardHome.yaml iskopirajte u c:\docker\AdGuardHome\conf\AdGuardHome.yaml.

Iako možete koristiti kompletne Docker naredbe, preporučamo da koristite docker compose. To se svodi na to da u mapi za neki program imate jednu datoteku compose.yaml, koju možete urediti i onda pomoću nekoliko docker compose naredbi upogoniti taj program, odnosno servis. Odgovarajuće compose.yaml datoteke možete potražiti na stranici konkretnog programa koji vas zanima, na GitHub stranici konkretnog programa, možete izguglati ili tražiti neki AI chatbot da vam sastavi neku koja bi vama odgovarala. Ta datoteka je u starijim verzijama Dockera češće bila zvana docker-compose.yaml, a Docker prihvaća i nastavak .yml umjesto .yaml, pa da vas to ne zbuni.

name: adguardhome

services:
  adguard:
    image: adguard/adguardhome:latest
    container_name: adguard
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true

    ports:
      - "3000:3000/tcp"
      - "53:53/tcp"
      - "53:53/udp"

    volumes:
      - "C:\\docker\\AdGuardHome\\conf:/opt/adguardhome/conf"
      - "C:/docker/AdGuardHome/work:/opt/adguardhome/work"

   environment:
     - TZ=Europe/Zagreb

Što je što u svemu ovome? Name je ime stacka, grupe servisa (u ovom slučaju imamo samo jednog, ali ih može biti i više), od servisa imamo jednog kojeg smo nazvali adguard, za njega stoji da mu je image adguard/adguardhome:latest (uvijek će se preuzeti najnoviji dostupni image). Naziv kontejnera je adguad, a za restart piše unless-stopped, što znači da će Docker taj kontejner pokretati nakon svakog restarta računala, osim ako ručno ne zaustavite servis. Dalje imamo jednu sigurnosnu opciju, nakon čega idu portovi (ports). Vidjet ćete da su tu uvijek po dva porta, odvojena dvotočkom. Prije dvotočke je port koji će taj servis imati na serveru (port preko kojeg ćete mu pristupati kad je servis upogonjen), a nakon dvotočke ide "interni" port (port koji aplikacija koristi unutar kontejnera).

Port 3000 je onaj koji inače koristimo za AdGuardovo administracijsko sučelje - to mu je defaultni port, a i konfigurirali smo ga tako da mu sučelje ostane na portu 3000. Recimo da tu konfiguraciju želite prebaciti na neki drugi server, a da je na drugome serveru port 3000 već zauzet. Tada ne biste trebali ništa petljati po samom AdGuardu, odnosno njegovim opcijama. Jednostavno biste u datoteci compose.yaml promijenili port koji želite koristiti na serveru, pa biste napisali recimo 3030:3000/tcp. To znači da biste sad administratorskom sučelju pristupali preko localhost:3030, no AdGuard Home bi taj upit doživio kao da ste upisali localhost:3000. Znači, Docker bi "preveo" port 3030 u port 3000. To je jedna od korisnih mogućnosti Dockera, jer servisi koje upogonite preko njega jako malo ovise o okolini u kojoj se nalaze.

Bitno je razjasniti još ovo volumes. Princip je sličan kao kod portova - lijevo je putanja na vašem serveru, a desno ono kako će se ta putanja prezentirani kontejneriziranom servisu. Mi smo Dockeru rekli da je putanja mape (direktorija) u kojoj se nalazi konfiguracijska datoteka na našem serveru c:\docker\AdGuardHome, a AdGuard Home tu putanju "doživljava" kao putanju /opt/adguardhome/conf (servis koristi upravu tu putanju unutar tog Linux kontejnera). AdGuardu Home treba još i "radna" mapa (work) pa smo i to definirali. Napomena oko pisanja Windows putanja u compose.yaml - morate koristiti \\ ili / umjesto \, jer se jedan backslash (kosa crta ulijevo) tretira kao escape znak (za dobivanje drugih znakova). Ako niste toliko vezani uz backslasheve, preporučamo da ih zamijenite kosim crtama udesno - onako kako je to uobičajeno pod Linuxom. Znači, C:\\docker\\AdGuardHome\\conf mogli biste pisati kao C:/docker/AdGuardHome/conf - to vam je najsigurnije.

Prije nego upogonimo AdGuard Home putem Dockera, moramo onemogućiti njegov Windows servis. Za to prvo otvorite Terminal s administratorskim pravima. Potom naredbom

sc.exe stop adguardhome

onemogućite AdGuardov Windows servis, jer će se u suprotnom oni "boriti" za isti port na serveru, odnosno Docker verzija neće se moći učitati ako je port 53 zauzela Windows verzija. Nakon toga, možemo upogoniti AdGuard Home kao Docker kontejner. Za to prvo se moramo prebaciti u mapu s datotekom compose.yaml, dakle upotrijebimo naredbu

cd c:\docker\AdGuardHome

Zatim slijedi ključna naredba:

docker compose up

Vidjet ćete da kako Docker skida image AdGuarda Home i kako ga pokreće. U slučaju neke greške u compose.yaml datoteci, prikazat će se poruka u Terminalu. Ako nema greške, AdGuard Home u obliku kontejnerizirane aplikacije će se pokrenuti, a u Terminalu ćete vidjeti statusne informacije. Nakon prvog docker compose up-a Windowsov Firewall (vatrozid) će vas tražiti da dozvolite Docker Desktop Backendu neke dodatne osobine - dozvolite klikom na gumb Allow.

Ovo se dogodi nakon što smo ispravno podešenu datoteku compose.yaml upogonili naredbom docker compose up - Docker poskida odgovarajući image AdGuarovog kontejnera, te ga učita, a AdGuard Home potom u Terminal ispisuje što u danom trenutku radi
Ovo se dogodi nakon što smo ispravno podešenu datoteku compose.yaml upogonili naredbom docker compose up - Docker poskida odgovarajući image AdGuarovog kontejnera, te ga učita, a AdGuard Home potom u Terminal ispisuje što u danom trenutku radi

Sad možete posjetiti adresu administracijskog sučelja AdGuarda Home. Ako ste radili po našim uputama, a bez pripreme domene, sučelje se javlja na portu 3000 pa u web-pregledniku možete otvoriti URL http://localhost:3000. Ako ste si pripremili domenu, onda umjesto localhost:3000 upišete naziv domene (u našem slučaju to je https://adguard.probnadomena.online). Ako vam se učita sučelje AdGuarda i u njemu vidite svoje "stare" postavke (statistika će biti resetirana), znači da ste uspješno obavili tranziciju.

Stvar još nije gotova. Sad je AdGuard Home upogonjen preko Dockera kao klasični program, što znači da ako zatvorite Terminal ili prekinete izvođenje docker compose naredbe, prekinut će se izvođenje AdGuarda Home, pa ga moramo "instalirati" da se cijelo vrijeme vrti, bez Terminala. To se radi tako da ga "odvojimo" (detach) od procesa (naredbe) kojom je pokrenut - u Terminalu pritisnemo tipku d na tipkovnici.

I sad otvorite Docker Desktop i s lijeve strane kliknite na Containers. U glavnom dijelu prozora vidjet ćete grupu (stack) adguardhome, a ako je proširite, vidjet ćete u njoj kontejner adguard. Pod Actions vidite plavi kvadratić zaobljenih rubova, koji vam govori da se trenutni kontejner (program) uredno vrti, a preko tog gumbića taj kontejner možete zaustaviti. Gumbić s tri vertialno postavljene točkice prikazuje izbornik putem kojeg možete obaviti restartanja stacka ili kontejnera, te još neke funkcije. Ako kliknete na sam kontejner, dobit ćete prikaz loga - znači nešto slično onome što ste vidjeli u Terminalu.

Još docker compose naredbi

Usput rečeno, ako želite odmah detachati servis, dodat ćete -d na kraj naredbe, odnosno naredba će onda biti:

docker compose up -d

Upravo ćete taj oblik naredbe najčešće koristiti - naredba bez prekidača -d tipično se koristi samo ispočetka, dok ne uspijete upogoniti servis. Naknadno ispis logova u Terminalu možete dobiti naredbom

docker compose logs -f

U slučaju da je bilo nekog problema sa stvaranjem kontejnera prilikom compose up naredbe, možete pokušati dodati prekidač --force-recreate. Ako želite (privremeno?) onemogućiti servis, koristit ćete naredbu docker compose down. Za skidanje najnovijeg imagea konkretnog servisa, koristi se naredba docker compose pull, nakon čega stack treba ponovno dignuti naredbom docker compose up -d.

Ovako otprilike izgledao bi kombinirani compose.yaml za docker compose, kad bismo u njega ugurali tri servisa: caddy, php (specifičnu verziju 8.4-fpm-alpine) te cloudflared - praktičnije nego imati zasebne servise u Windowsima za svaki od tih servisa/programa. Ujedno, kad bismo to tako radili i imali AdGuard Home u Dockeru, u datoteci Caddyfile mogli bismo drugačije definirati reverse proxy - recimo za AdGuard Home to bi onda moglo izgledati ovako: reverse_proxy http://host.docker.internal:3000. Dakle, kad je Caddy pokrenut kao docker container, onda promet može slati direktno drugim docker containerima
Ovako otprilike izgledao bi kombinirani compose.yaml za docker compose, kad bismo u njega ugurali tri servisa: caddy, php (specifičnu verziju 8.4-fpm-alpine) te cloudflared - praktičnije nego imati zasebne servise u Windowsima za svaki od tih servisa/programa. Ujedno, kad bismo to tako radili i imali AdGuard Home u Dockeru, u datoteci Caddyfile mogli bismo drugačije definirati reverse proxy - recimo za AdGuard Home to bi onda moglo izgledati ovako: reverse_proxy http://host.docker.internal:3000. Dakle, kad je Caddy pokrenut kao docker container, onda promet može slati direktno drugim docker containerima

Na donekle sličan način mogli bismo u Docker premjestiti Caddy, PHP i cloudflared (mogli bismo ih držati sva tri u zajedničkom stacku, odnosno definirati ih u zajedničkoj compose.yaml datoteci), no zbog prostora potrebnog za pokrivanje toga ostavljamo to za neki drugi put.

Bug 407 listopad 2026.

Web na svom računalu