---
# System prepended metadata

title: 'MMOS 2025/26: Vježba 04'
tags: [MMOS_2526]

---

---
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                      |


---
