/computer-networks

computer networks on docker @ fmi.unibuc.ro

Primary LanguagePython

2019 computer networks lab

Curs

Înainte de a începe

Pentru acest laborator, vom avea nevoie de:

  • docker
  • docker-compose - este deja adăugat în acest repository
  • după instalarea docker, trebuie să adăugați userul cu care lucrăm în grupul de docker sudo usermod -aG docker $USER

Concepte de bază

O masină virtuală de docker o vom numi container sau serviciu. Pentru a porni o masină virtuală, trebuie să folosim docker build pentru a construi o imagine cu un sistem de operare care să fie utilizat pe acea masină. Comanda de build utilizează fișierul ./docker/Dockerfile care definește ce sistem de operare folosim, ce aplicații vor fi instalate și ce useri vor exista pe containerele care rulează acea imagine.

Comanda docker-compose up -d, va citi fișierul docker-compose.yml din path-ul de unde rulăm comanda și va lansa containere după cum sunt definite în fișier în secțiunea services: rt1, rt2, etc.. Containere care sunt configurate să ruleze o imagine dată (în cazul nostru baseimage, imaginea construită la pasul anterior), să fie conectate la o rețea (în cazul nostru rețeaua dmz) sau să aibă definite un mount local. Comanda docker-compose pe linux nu se instalează default cu docker, ci trebuie să o instalăm separat. În cazul nostru, comanda se găsește chiar în directorul computer-networks, în acest repository. Așa că dacă nu aveți comanda instalată, o puteți rula din acest director folosind calea relativă ./docker-compose.

Starting up

# build the docker image
docker build -t baseimage ./docker/
# start services defined in docker-compose.yml
docker-compose up -d

Comenzi de bază de docker

# list your images
docker image ls

# stop services
docker-compose down

# see the containers running
docker ps
docker-compose ps

# kill a container
docker kill $CONTAINER_ID

# see the containers not running
docker ps --filter "status=exited"

# remove the container
docker rm $CONTAINER_ID

# list available networks
docker network ls

# inspect network
docker network inspect $NETWORK_ID

# inspect container
docker inspect $CONTAINER_ID

# see container ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_ID

# attach to a container
docker exec -it $CONTAINER_ID bash

# attach using docker-compose
docker-compose exec rt1 bash

# attach as root to a container
docker-compose exec --user root rt1 bash

References