- Materiale de curs
- Cursul de Computer Networks, University of Washington
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
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
.
# build the docker image
docker build -t baseimage ./docker/
# start services defined in docker-compose.yml
docker-compose up -d
# 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