Docker is een toolset waarmee gebruikers applicaties in containers kunnen draaien.
- Een runtime waarmee images als container gedraaid kunnen worden
- Een taal om het bouwen van images te beschrijven
- Een image format om gebouwde images op te slaan
- Een protocol om images op te halen bij een "registry"
--
--
Elk proces op Linux heeft namespaces
- PID
- Network
- Mounts
- UTS (hostname/nisdomainname)
- IPC
- cgroups (cpu/memory/io)
--
--
- Containers draaien altijd op een copy-on-write filesystem (overlayfs)
- Als een container stopt gaan wijzigingen verloren
Een dockerfile bevat de stap-voor-stap instructies om een container image te maken. Deze dockerfile draait deze presentatie in een Docker container.
FROM centos:7
RUN yum -y install httpd && yum clean all
ADD . /var/www/html/
EXPOSE 80/tcp
CMD ["-D","FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]
--
FROM centos/7 #Basis image
RUN yum -y install httpd && yum clean all # Installeer software
ADD . /var/www/html/ # Voeg files toe
EXPOSE 80/tcp # Geef aan dat we op port 80 verkeer ontvangen
CMD ["-D","FOREGROUND"] # Command arguments
ENTRYPOINT ["/usr/bin/httpd"] # Primary commmand
--
- ENV
- VOLUME
- ONBUILD
- LABEL
- ARG
- WORKDIR
docker build -t slides .
- Bouw de dockerfile in de huidige directory
docker run -ti busybox
- Draai een busybox shell in docker
docker run -d -p 8080:80 slides -n slides
- Docker run de slides container en bind host port 8080 aan container port 80
docker exec -ti slides bash
- Draai een shell in een draaiende container
Docker images zijn gestandaardiseerd in de OCI Image specificatie Elke layer wordt targzipt en voorzien van metadata in json format
https://github.com/opencontainers/image-spec
Docker registry is in feite een http dienst waar de layers van images en metadata kan worden gezocht en gedownload
docker pull docker.io/php
- Docker Hub (docker.io)
- Redhat Container Registry (registry.access.redhat.com)
- CentOS Container Registry (registry.centos.org)
- Quay (quay.io)
- docker run -d mysql -v /var/tmp/mysql:/var/lib/mysql:Z
- docker run -d -l mysql app
- docker run --volumes-from app web
- rkt (Tectonic/Container Linux)
- containerd
- cri-o (Openshift)