8. Container virtualisation

Linux (for data Scientists)
HOGENT toegepaste informatica

Thomas Parmentier, Andy Van Maele, Bert Van Vreckem

2024-2025

Intro

Containervirtualisatie

https://www.redhat.com/en/topics/containers/containers-vs-vms

Containers zijn oud!

OS-level virtualization

  • Mainframe
  • Solaris Zones
  • FreeBSD jails
  • Linux Containers (LXC)

En toen kwam Docker…

Solomon Hykes @ PyCon 2013

De belofte…

  • Lichtgewicht VM => efficient gebruik van systeembronnen
  • Encapsulation van applicatie als beveiliging
  • Makkelijker uitrollen in productie

Labo-omgeving opzetten

Docker opzetten

  • Je zou het labo met Docker Desktop kunnen doen, maar…
    • Gebaseerd op Hyper-V + Windows Subsystem for Linux
  • … we gaan het doen met een VirtualBox VM
    • Installatie geautomatiseerd via script

Installeer en start Docker

  • Open terminal, ga naar subdirectory dockerlab/ binnen je repository.
  • Voer het script install-docker.sh uit als root.

Aan de slag!

  • Open de labo-opdracht (dockerlab/assignment.md)
  • Open een browsertabblad en surf naar http://localhost:9000 (Portainer UI)
  • Volg de stappen in de opgave!

Belangrijke competenties

Man-pages

man docker-run
man docker-exec
man docker-<TAB><TAB>

Images

docker image ls
docker pull

Containers

docker run -d
docker run -i -t
docker exec -i -t
docker ps
docker container ls

Volumes voor persistente data

docker volume ls
docker volume create VOLUME_NAME
docker volume inspect VOLUME_NAME
docker volume rm VOLUME_NAME
docker volume prune

Custom images

Voorbeeld Dockerfile:

FROM alpine:latest
LABEL description="This example Dockerfile installs NGINX."
RUN apk add --update nginx && \
    rm -rf /var/cache/apk/* && \
    mkdir -p /tmp/nginx/
COPY files/nginx.conf /etc/nginx/nginx.conf
COPY files/default.conf /etc/nginx/conf.d/default.conf
ADD files/site-contents.tar.bz2 /usr/share/nginx/
EXPOSE 80/tcp
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]

Custom images

docker image build --tag local:static-site .
docker image ls
docker run -d -p 8080:80 --name websrv local:static-site

Gelaagd bestandssysteem

docker image inspect
docker image inspect alpine:latest | jq ".[]|.RootFS.Layers"
docker image history

Docker-compose

docker-compose up -d

Voorbeeld: dockerlab/labs/todo-app/docker-compose.yml