---
author: Matija Burić
---
### Mrežni i mobilni operacijski sustavi 2025/26
# Kontejnerizacija: Docker osnove
U ovoj vježbi učimo što su kontejneri, slike i registri te prolazimo kroz osnovne Docker naredbe.
---
:::success
Na slijedećem linku se nalazi uputa za korištenje Play With Docker online lab-om:
[Kako se spojiti na https://labs.play-with-docker.com/ preko SSH](https://hackmd.io/@MatijaBuric/TT_1)
:::
---
## Kontejnerizacija
Kontejnerizacija je tehnologija koja ide korak dalje od virtualizacije.
Umjesto da koristi cijeli virtualni stroj, kontejneri dijele jezgru operacijskog sustava s domaćinom, što ih čini lakšim i bržim za pokretanje.
---
## Docker arhitektura
Docker se sastoji od nekoliko ključnih komponenata:
### Kontejneri (Containers)
- Izolirano okruženje u kojem se izvršavaju aplikacije i njihove ovisnosti.
- Pokreću se iz Docker slika i imaju vlastiti filesystem, procese i mrežu.
- Dijele kernel hosta, ali ostaju izolirani.
- Lako se pokreću i zaustavljaju → omogućuju brzu skalabilnost.
### Slike (Images)
- Predlošci za kontejnere.
- Sadrže sve potrebne datoteke, konfiguraciju i ovisnosti.
- **Immutable** – ne mijenjaju se nakon izgradnje.
- Dijele se putem registara (Docker Hub, privatni registri).
### Docker Registar (Docker Registry)
- Centralno mjesto za pohranu i distribuciju slika.
- **Javni**: Docker Hub, Quay.io
- **Privatni**: Harbor, GitHub Container Registry, GitLab, AWS ECR…
- Omogućuje verzioniranje, dijeljenje i jednostavno povlačenje slika.
---
## Osnovne Docker naredbe
### Docker: `pull`
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:4f53e2564790c8e7856ec08e384732aa38dc43c52f0...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
- `docker pull` preuzima sliku iz registra.
---
### Docker: `run`
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be
working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
...
- `docker run` pokreće kontejner iz slike.
---
### Docker: `ps` i `images`
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
2520017c86ec hello-world "/hello" 4 min ago Exit 4 minutes ago
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 5 months ago 13.3kB
- `docker ps` → prikaz aktivnih kontejnera.
- `docker ps -a` → svi kontejneri.
- `docker images` → sve lokalne slike.
---
### Docker: `start` i `logs`
$ docker start 2520017c86ec
2520017c86ec
$ docker logs 2520017c86ec
Hello from Docker!
This message shows that your installation appears to be
working correctly.
...
- `docker start` pokreće prethodno zaustavljeni kontejner.
- `docker logs` prikazuje izlaz iz kontejnera.
---
### Docker: `stop`
$ docker run jpetazzo/clock
Unable to find image 'jpetazzo/clock:latest' locally
latest: Pulling from jpetazzo/clock
...
Wed Oct 4 12:12:33 UTC 2023
Wed Oct 4 12:12:34 UTC 2023
Otvorite novi terminal i zaustavite ga:
$ docker stop 9a9dcb9d2a65
9a9dcb9d2a65
- `docker stop` čeka 10 sekundi prije prisilnog gašenja.
---
### Docker: `kill`
$ docker start 9a9dcb9d2a65
9a9dcb9d2a65
$ docker ps
CONTAINER ID IMAGE COMMAND STATUS
9a9dcb9d2a65 jpetazzo/clock "/bin/sh ..." Up 4 seconds
$ docker kill 9a9dcb9d2a65
9a9dcb9d2a65
- `docker kill` odmah zaustavlja kontejner.
---
### Docker: run zastavice
Pokretanje u pozadini:
$ docker run -d jpetazzo/clock
b578448ae13cad8b1155871478e242ec63a03f2526dd44ae964fdc7f4a5990af
Povezivanje na kontejner:
$ docker attach b578448ae13c
Wed Oct 4 12:51:32 UTC 2023
Wed Oct 4 12:51:33 UTC 2023
Interaktivni način:
$ docker run -it alpine
/ # ls
bin dev etc home lib media mnt opt ...
- `-d` → detached (pozadina)
- `-it` → interaktivni terminal
Izlazak:
- `Ctrl+P` `Ctrl+Q` → detach
- `Ctrl+D` → izlaz i gašenje
Pokretanje naredbi u aktivnom kontejneru:
$ docker exec -it 93fe145f7e8b ash
/ #
- `docker exec` izvršava naredbe unutar kontejnera.
---
### Docker: brisanje
Pokušaj brisanja slike u uporabi:
$ docker rmi alpine
Error response from daemon: conflict: unable to remove
repository reference "alpine" (must force) - container
03c94db6d0e5 is using its referenced image 8ca4688f4f35
Rješenje → prvo ukloniti kontejner:
$ docker kill 03c94db6d0e5
$ docker rm 03c94db6d0e5
Zatim izbrisati sliku:
$ docker rmi alpine
Untagged: alpine:latest
Deleted: sha256:871a9153c1842e3b480cb1be691c64151bc96a...
---
### Docker: višestruko brisanje
$ docker container prune
$ docker container prune -f
$ docker image prune
$ docker image prune -a
- `docker container prune` briše sve zaustavljene kontejnere.
- `docker container prune -f` briše sve zaustavljene kontejnere bez potvrde.
- `docker image prune` briše sve nepotrebne (nedostupne) image-e.
- `docker image prune` briše sve image-e, uključujući i one koji se koriste.
---
### Docker: čišćenje svih resursa
$ docker stop $(docker ps -aq)
$ docker rm $(docker ps -aq)
$ docker rmi $(docker images -q)
- kompletno čišćenje kontejnera i slika.
---
## Javne slike za vježbu
| Slika | Poveznica | Opis |
|-----------------------|---------------------------------------------------------------------------|--------------------------------------|
| **2048-cli** | [defnotgustavom/2048-cli](https://hub.docker.com/r/defnotgustavom/2048-cli) | Igra 2048 u terminalu |
| **ascii-art** | [msoap/ascii-art](https://hub.docker.com/r/msoap/ascii-art) | ASCII umjetničke igre |
| **a_calc** | [defnotgustavom/a_calc](https://hub.docker.com/r/defnotgustavom/a_calc) | Kalkulator u terminalu |
| **minesweeper-cli** | [minesweeper](https://hub.docker.com/r/defnotgustavom/minesweeper) | Igra Minesweeper u terminalu |
| **tetris** | [tetris](https://hub.docker.com/r/defnotgustavom/tetris) | Klasični Tetris |
---