1/97
Docker skripta i Docker Compose skripta
[POJAM] Šta je Docker prema definiciji iz skripte?
Skup PaaS (Platform as a Service) proizvoda koji koriste virtuelizaciju na nivou OS-a za isporuku softvera u paketima zvanim kontejneri. Prvi put pokrenut 2013, razvio ga Docker, Inc.
[POJAM] Razlika između Docker slike (image) i kontejnera?
Slika = upakovan softver sa svim zavisnostima (temelj za kontejner).
Kontejner = pokrenuta instanca slike (izolovano okruženje).
[POJAM] Šta je Docker Registry?
Javni ili privatni registar za skladištenje i deljenje slika (npr. Docker Hub).
[POJAM] Šta je Docker Daemon, a šta Docker Client?
Daemon = pozadinski proces koji upravlja kontejnerima.
Client = šalje komande daemon-u (lokalno ili na udaljenom serveru).
CLI = korisnički interfejs za slanje komandi.
[VIŠE TAČNIH] Koje su komponente Docker arhitekture?
A) Docker Daemon
B) Docker CLI
C) Docker Client
D) Docker Images
E) Docker Containers
F) Docker Registry
G) Docker Compiler
Tačno: A, B, C, D, E, F. Netačno: G (ne postoji).
[POJAM] Šta znače tagovi kod slika i šta ako se tag ne navede?
Tag razlikuje verzije iste slike. Ako se ne navede, podrazumevano je latest. U praksi se preporučuje izbegavati latest i navesti eksplicitnu verziju.
[POJAM] Kako radi keširanje (cache invalidation) pri izradi slike?
Svaka instrukcija u Dockerfile-u = jedan sloj (layer). Docker koristi keš za korake koji se nisu menjali. Kad se nešto promeni (npr. server.js ili package.json), keš se poništava za taj korak i svi koraci posle njega se ponovo izvršavaju.
[POJAM] Razlika između ARG i ENV u Dockerfile-u?
ARG = promenljive samo u fazi izgradnje (build) slike, nisu dostupne u pokrenutom kontejneru. ENV = environment promenljive dostupne i u Dockerfile-u i u pokrenutom kontejneru (aplikaciji tokom izvršavanja).
[POJAM] Koja je glavna svrha volumena u Dockeru?
Perzistentno čuvanje podataka (van životnog veka kontejnera) i deljenje podataka između kontejnera i host mašine.
[VIŠE TAČNIH] Koje vrste volumena postoje?
A) Anonimni (anonymous)
B) Imenovani (named)
C) Bind-mount
D) Snapshot volumen
Tačno: A, B, C. Netačno: D (ne postoji).
[POJAM] Razlika između anonimnih i imenovanih volumena?
Anonimni = nemaju ime, Docker ih kreira kad se kontejner pokrene, a uništavaju se kad se kontejner zaustavi (ako se koristi --rm ili ako se obriše).
Imenovani = imaju ime i ostaju na sistemu i nakon zaustavljanja ili brisanja kontejnera, idealni za trajnu perzistenciju i deljenje.
[POJAM] Šta je bind-mount?
Povezivanje direktorijuma sa host mašine direktno u kontejner: -v HOST_MACHINE_PATH:PATH_IN_CONTAINER
[POJAM] Problem sa node_modules kad se bind-mount-uje /app, i rešenje?
Bind-mount prekrije /app pa se node_modules iz slike izgubi/poremeti. Rešenje: dodatni izolovani (anonimni) volumen -v /app/node_modules. Pobeđuje volumen sa specifičnijom putanjom u kontejneru.
[VIŠE TAČNIH] Koji su Docker mrežni drajveri?
A) bridge
B) host
C) none
D) overlay
E) macvlan / ipvlan
F) tunnel
Tačno: A, B, C, D, E. Netačno: F (ne postoji).
[POJAM] Karakteristika drajvera bridge?
Podrazumevani drajver. Povezuje kontejnere na istoj host mašini, mogu komunicirati međusobno i sa hostom, uz pristup internetu.
[POJAM] Karakteristika drajvera host?
Kontejner deli mrežu i IP adresu direktno sa host mašinom (nema mrežne izolacije).
[POJAM] Karakteristika drajvera none?
Kontejner je potpuno izolovan: nema mrežnu vezu ni pristup internetu.
[POJAM] Karakteristika drajvera overlay?
Povezuje više Docker daemon-a, pa kontejneri komuniciraju preko više host mašina (klasteri, skaliranje).
[POJAM] Karakteristika drajvera ipvlan / macvlan?
Dodeljuju kontejnerima direktne IP ili MAC adrese (napredne mrežne integracije).
[POJAM] Prednost povezivanja kontejnera preko imena servisa umesto IP adresa?
IP adrese se mogu promeniti pri restartu. Docker unutar kreirane mreže sam rešava imena (npr. host: 'mysql-server'), pa ne treba menjati kod ni rekreirati slike.
[POJAM] Kako kontejner komunicira sa bazom na host mašini?
Umesto localhost koristi IP adresu hosta (npr. docker0 most, 172.17.0.1), uz podešavanje MySQL-a: bind-address = 0.0.0.0
[VIŠE TAČNIH] Šta se vidi izvršavanjem docker inspect nad kontejnerom?
A) State
B) ID i ime
C) NetworkSettings
D) Env
E) Portovi (ExposedPorts, PortBindings)
F) Mounts (volumeni)
G) Lozinka Docker Hub naloga
Tačno: A, B, C, D, E, F. Netačno: G.
[POJAM] Čemu služi docker inspect?
Detaljne specifikacije i metapodaci o slici ili kontejneru (JSON: mreže, env varijable, komande, slojevi…).
[KOD] Komanda za izgradnju slike iz Dockerfile-a (sintaksa)?
docker build -t IME_SLIKE:OZNAKA PUTANJA_DO_DOCKERFAJLA
(npr. docker build -t wishlist-app .)
-t = ime i tag,
tačka = trenutni direktorijum.
Razmak pre tačke je obavezan!
[KOD] Dopuni: docker build ____ wishlist-app .
-t
[KOD] Brisanje slike koju ne koristi nijedan kontejner?
docker rmi IMAGE[:TAG] (ili docker rmi ID_slike)
[KOD] Prinudno brisanje slike koju koristi kontejner?
docker rmi -f IMAGE[:TAG] ili docker rmi --force IMAGE[:TAG] (briše sliku, ali ne i kontejner, može izazvati čudno ponašanje)
[KOD] Kako se menja oznaka (tag) postojeće slike?
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
[KOD] Osnovna sintaksa docker run?
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG…]
[KOD] Šta radi docker run -it ubuntu bash?
Pokreće kontejner na Ubuntu slici u interaktivnom režimu (-it) i pokreće bash ljusku u njemu, pa korisnik direktno radi u kontejneru.
[KOD] Mapiranje portova: sintaksa i značenje -p 8080:80?
-p HOST_PORT:CONTAINER_PORT. Port 80 u kontejneru je mapiran na port 8080 na hostu, pristup preko localhost:8080.
[KOD] Dopuni da se port 80 kontejnera mapira na 8080 hosta: docker run ____ wishlist-app
-p 8080:80
[KOD] Komanda za prikaz pokrenutih kontejnera?
docker ps
[KOD] Komanda za prikaz svih kontejnera (i zaustavljenih)?
docker ps -a ili docker ps --all
[KOD] Komanda za zaustavljanje kontejnera?
docker stop CONTAINER_ID_or_NAME (npr. docker stop d6b ili docker stop distracted_moore)
[POJAM] Razlika između docker stop i docker rm?
stop = zaustavlja proces u kontejneru.
rm = trajno briše kontejner (ne može se obrisati pokrenut kontejner, prvo se mora zaustaviti).
[KOD] Šta radi opcija -a u docker start -a?
attach: prikazuje izlaz (output/logs) kontejnera u trenutnom terminalu pri ponovnom pokretanju.
[POJAM] Čemu služi docker attach?
Priključuje terminal na već pokrenut kontejner (interaktivna sesija). Pažnja: Ctrl+C može zaustaviti proces u kontejneru.
[KOD] Opcija docker run koja automatski briše kontejner kad se zaustavi?
--rm (npr. docker run --rm -d …)
[KOD] Sintaksa za imenovani volumen u docker run?
-v VOLUME_NAME:PATH_IN_CONTAINER
(npr. -v message:/app/message)
[KOD] Dopuni da se imenovani volumen message mapira na /app/message:
docker run ____ IMAGE
-v message:/app/message
[KOD] Sintaksa za bind-mount u docker run?
-v HOST_MACHINE_PATH:PATH_IN_CONTAINER
(npr. -v C:\Users\Aleksa\Desktop\projekat:/app)
[KOD] Prikaz svih Docker volumena?
docker volume ls
[KOD] Brisanje volumena feedback?
docker volume rm feedback
[KOD] Kreiranje nove mreže (npr. app-network)?
docker network create app-network
[KOD] Prikaz svih mreža?
docker network ls
[KOD] Naknadno priključivanje kontejnera na postojeću mrežu?
docker network connect naziv-mreze naziv-kontejnera
[KOD] Pokretanje kontejnera na specifičnoj mreži?
docker run --name fav4 -d --network app-network …
[KOD] Provera IP adrese docker0 mosta na Linuxu?
ip addr show docker0
[KOD] Kako naći IP adresu drugog kontejnera?
docker container inspect naziv-kontejnera
(polje IPAddress, npr. 172.17.0.3)
[KOD] Provera baza i korisnika u MySQL kontejneru (interaktivno)?
docker exec -it mysql-server mysql -uroot -p
[KOD] Pokretanje compose aplikacije u pozadini (detached)?
sudo docker compose up -d
[KOD] Dopuni: sudo docker compose ____ -d
up
[KOD] Gašenje i brisanje kontejnera i mreža iz Compose-a, UKLJUČUJUĆI volumene?
sudo docker compose down -v ili docker compose down --volumes
[KOD] Gašenje i brisanje kontejnera i mreža iz Compose-a (bez volumena)?
sudo docker compose down
[KOD] Provera verzije Docker Compose-a?
sudo docker compose version
[POJAM] Šta je Docker Compose?
Alat za definisanje i pokretanje multi-kontejnerskih aplikacija. Sve (slike, kontejneri, volumeni, mreže) definiše se u jednom YAML fajlu i pokreće jednom komandom.
[POJAM] Docker Compose: plugin ili standalone?
Plugin (docker compose), ugrađen direktno u Docker CLI.
[POJAM] Preferirani naziv Compose fajla i alternative?
Preferirano: compose.yaml. Podržani su i docker-compose.yaml i docker-compose.yml (zbog kompatibilnosti unazad).
[VIŠE TAČNIH] Osnovna pravila YAML sintakse?
A) key: value, razmak posle dvotačke je obavezan
B) Podvrednosti se uvlače razmacima
C) Crtica (-) označava element liste
D) Komentari se pišu sa tarabom #
E) Komentari se pišu sa //
F) Uvlačenje se radi tabulatorom
Tačno: A, B, C, D. Netačno: E (tačno: komentar je #), F (tačno: uvlači se razmacima).
[POJAM] Šta je top-level opcija name u compose.yaml?
Naziv projekta. Ako nije definisana, ime se dodeljuje prema nazivu root foldera.
[POJAM] Kako se definiše imenovani volumen u compose.yaml (2 koraka)?
1) Pod top-level ključem volumes (npr. mysql-data:).
2) Referenciranje unutar servisa pod njegovim volumes (npr. - mysql-data:/var/lib/mysql).
[POJAM] Čemu služi env_file?
Učitavanje environment promenljivih iz eksterne datoteke (npr. - ./env/mysql.env).
[KOD] Kako se fajl montira kao read-only?
Dodavanjem :ro na kraj putanje: - ./db/my.cnf:/etc/mysql/conf.d/my-custom.cnf:ro
[KOD] Dopuni da bind-mount bude read-only: - ./db/my.cnf:/etc/mysql/conf.d/my-custom.cnf____
:ro
[POJAM] Da li docker compose down briše volumene i imidže?
Ne. Gasi i briše kontejnere i mreže. Imidži i imenovani volumeni ostaju (volumeni se brišu tek sa down -v ili ručno).
Iimidži se ponovo build-uju kad se pokrene sudo docker compose up, a izmene u imidžu se primenjuju na kontejner.
[POJAM] Zašto samo depends_on: - mysql nekad nije dovoljan?
Podrazumevano čeka samo da se kontejner pokrene (service_started), ne i da baza bude spremna za konekcije, pa može doći do greške ECONNREFUSED.
[KOD] Kako backend čeka da baza bude spremna?
healthcheck na bazi + u backendu: depends_on > mysql > condition: service_healthy (svaki nivo uvučen razmacima u novom redu)
[KOD] Dopuni: depends_on: > mysql: > condition: ____
service_healthy
[POJAM] Podopcije healthcheck-a?
test (komanda; počinje sa NONE, CMD ili CMD-SHELL), interval (vreme između provera), timeout (posle toga je provera neuspešna), retries (broj uzastopnih neuspeha pre unhealthy).
[POJAM] Kako frontend definiše zavisnost od backend-a?
depends_on: - backend (direktno ime servisa, obično bez složenog healthcheck-a).
[POJAM] Zašto se u servisu navode i bind-mount (./frontend:/app) i volumen /app/node_modules?
Bind-mount: promene koda se odmah vide u kontejneru bez rekreiranja slike. Izolovan /app/node_modules: sprečava da prazan folder sa hosta pregazi zavisnosti u kontejneru.
[POJAM] Čemu služi restart i šta radi restart: always?
restart definiše ponašanje pri grešci/zaustavljanju.
always = kontejner se automatski restartuje kad se zaustavi ili kad se sistem ponovo pokrene.
[POJAM] Razlika između entrypoint i command u compose.yaml?
entrypoint = komanda/skripta koja se obavezno izvršava pri pokretanju (npr. entrypoint: bash).
command = podrazumevana komanda ili argumenti (npr. command: ["npm", "start"]).
[POJAM] Čemu služi labels u Compose-u?
Dodaje metapodatke/oznake kontejneru radi organizacije, filtriranja i pretrage.
[POJAM] Čemu služi network_mode?
Postavlja režim mreže (npr. network_mode: host, kontejner koristi mrežu host mašine).
[T/N] Komanda EXPOSE u Dockerfile-u automatski otvara port na host mašini.
Netačno. EXPOSE je samo informativna (dokumentuje port), a port na hostu se otvara opcijom -p pri pokretanju.
[T/N] CMD instrukcija se izvršava u fazi build-ovanja slike.
Netačno. CMD se izvršava tek pri pokretanju kontejnera (docker run).
[T/N] Ako se tag ne navede pri build-u, koristi se latest.
Tačno.
[T/N] ARG promenljive su dostupne u pokrenutom kontejneru.
Netačno (samo u fazi build-a; ENV je dostupan i u kontejneru).
[T/N] docker volume ls prikazuje sve Docker volumene na sistemu.
Tačno.
[T/N] docker ps prikazuje i zaustavljene kontejnere.
Netačno (samo pokrenute; za sve je docker ps -a).
[T/N] docker rmi briše i kontejner koji koristi tu sliku.
Netačno (briše sliku, kontejner ostaje).
[T/N] Imenovani volumeni ostaju sačuvani i nakon brisanja kontejnera.
Tačno.
[T/N] U opciji -p 8080:80, 8080 je port u kontejneru, a 80 port na hostu.
Netačno. Obrnuto: HOST_PORT:CONTAINER_PORT,
8080 = host,
80 = kontejner.
[T/N] Opcija -p je obavezna da bi dva kontejnera u istoj privatnoj mreži komunicirala.
Netačno. Komuniciraju direktno preko unutrašnjih portova i imena servisa.
-p služi za izlaganje portova ka hostu.
[T/N] Bridge je podrazumevani Docker mrežni drajver.
Tačno.
[T/N] Drajver host zadržava mrežnu izolaciju između kontejnera i hosta.
Netačno (kontejner deli mrežu hosta, nema izolacije).
[T/N] Drajver overlay omogućava komunikaciju kontejnera preko više host mašina.
Tačno.
[T/N] YAML fajlovi u Compose-u koriste // za komentare.
Netačno (koristi se taraba #).
[T/N] depends_on po defaultu čeka da baza bude potpuno spremna da prima konekcije.
Netačno (čeka samo da se kontejner pokrene, treba healthcheck + condition: service_healthy).
[T/N] Preferirani naziv Compose fajla je compose.yaml.
Tačno.
[POJAM] Šta se dešava sa imidžima kad se posle docker compose down ponovo pokrene sudo docker compose up?
Po skripti: imidži se ponovo build-uju i sve izmene u imidžu se primenjuju na kontejner. Imenovani volumeni ostaju netaknuti.
[T/N] Po skripti, sudo docker compose up ponovo build-uje imidže pri pokretanju.
Tačno (formulacija iz skripte).
[KOD] Kako se u compose.yaml postavlja pokretanje kontejnera u pozadini?
detach: true
detach
[T/N] Anonimni volumeni se po skripti brišu kada se kontejner zaustavi (uz --rm ili ako se obriše).
Tačno (formulacija iz skripte).
[T/N] sudo docker compose down briše imidže i volumene.
Netačno. Briše kontejnere i mreže. Imidži i volumeni ostaju (volumeni se brišu tek sa down -v).