Introduction à Docker

@AlexisHassler

INSA
Sewatech

Principes de base

Architecture

A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it.

Containers isolate software from its surroundings.

https://www.docker.com/what-container

Architecture

Isolation

Architecture

VM
Docker

Architecture

Linux

En développement

MongoDB

PostgreSQL

MySQL

AsciiDoctor

RabbitMQ

ActiveMQ

ActiveMQ

Docker

En production

Docker en production

Ecosystème

Premiers pas

Installation sous Linux

  • Client
    • Application Linux
  • Serveur
    • Daemon Linux
Linux

Installation contre nature

Autres systèmes

Installation

docker version
Client:
 Version:	18.03.0-ce
 API version:	1.37
 Go version:	go1.9.4
 Git commit:	0520e24
 Built:	Wed Mar 21 23:10:01 2018
 OS/Arch:	linux/amd64
 Experimental:	false

Server:
 Engine:
  Version:	18.03.0-ce
  API version:	1.37 (minimum version 1.12)
  Go version:	go1.9.4
  Git commit:	0520e24
  Built:	Wed Mar 21 23:08:31 2018
  OS/Arch:	linux/amd64
  Experimental:	false

Démarrer un conteneur

docker image pull hello-world
docker container run hello-world

Conteneurs

Run interactif

docker container run -it debian
root@72371fac506b:/#

Isolation des conteneurs

ls -l /
rm -r /bin

Run interactif

docker container run -it debian
docker container run -it debian /bin/bash
docker container run -it debian echo "Hello World"

Run détaché

docker container run -d httpd
alexis@Mac ~ $

Run détaché

# Liste des conteneurs actifs
docker container ls

# Liste de tous les conteneurs
docker container ls -a
# Logs d'un conteneur
docker container logs <container-name>

Cycle de vie

docker container stop elegant_brahmagupta
docker container kill elegant_brahmagupta

Cycle de vie

container lifecycle

Cycle de vie

docker container rm elegant_brahmagupta
docker container rm 72371f
docker container run -it --rm debian

Cycle de vie

docker container rm $(docker container ls -f status=exited)
# avec confirmation
docker container prune

# sans confirmation
docker container prune -f

Images

Commande build

docker image build -t sw/app .
docker container run -d sw/app

Dockerfile

FROM httpd
MAINTAINER Alexis Hassler <alexis.hassler@sewatech.fr>

RUN apt update                     \
 && apt install net-tools

COPY site/ /var/www/

WORKDIR /var/www/

CMD ["/start.sh", "--env=default"]

Dockerfile, exécution

docker container run debian echo Hello

Gérer les images

docker image ls
docker image rm da7ff372b5067f5
docker image rm -f da7ff372b5067f5

Gérer les images

docker image rm $(docker image ls -q)
# uniquement sans tag
docker image prune

# y compris avec tag
docker image prune -a

# sans confirmation
docker image prune -f

Réseau

Exposition de ports

docker container run -p 8888:80 httpd

Réseaux par défaut

network bridge

Réseaux par défaut

network host

Réseaux par défaut

network none

Réseaux personnalisés

network custom

Réseaux personnalisés

docker network create frontend

docker container run -d --network frontend --name web        \
                     sewatech/httpd
docker container run -d --network frontend --name app        \
                     sewatech/tomcat
network custom named
$ ping web

Volumes

Volumes nommés

docker container run -it -v data-vol:/data --name cli debian
docker container run -it -v /data --name cli debian
image/svg+xml root:root root:root

Volumes nommés

docker volume create --name data-vol
docker volume ls
docker volume ls -f 'dangling=true'

Volumes nommés

docker volume rm data-vol
docker container rm -v cli
docker volume prune

Partage de répertoire

docker container run -d
           -v ${PWD}/web-content:/usr/local/apache2/htdocs    \
           --name web httpd
image/svg+xml root:root root:root

Multi-conteneurs

Docker Compose

  • Orchestration des conteneurs locaux
docker container run sw/web
docker container run sw/db
docker container run sw/app
  • Rationalisation des scripts
docker container run                   \
          -p 1000:8080 -p 1001:1099    \
          -v $PWD/data:/db/data        \
          -v $PWD/log:/db/logs         \
          --net=backend                \
          --name=db                    \
          sw/db main

Docker Compose

Docker Compose

compose_version=1.21.2
base_url=https://github.com/docker/compose/releases/download
url=$base_url/$compose_version/docker-compose-`uname -s`-`uname -m`

curl -L $url > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

Docker Compose

docker image pull docker/compose:$compose_version
docker container run --rm -it                                             \
                     -v /var/run/docker.sock:/var/run/docker.sock         \
                     -v $(pwd):$(pwd)                                     \
                     -w "$(pwd)"                                          \
                     docker/compose:$compose_version
compose_version=1.11.2
base_url=https://github.com/docker/compose/releases/download
url=$base_url/$compose_version/run.sh

curl -L $url > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose.yml

version: '2'
services:
  web:
    ...
volumes:
  log: ...
networks:
  front-tier:
    driver: bridge

docker-compose.yml

services:
  web:
    image: sewatech/web
    build:
      context: .
    ports:
    - "127.0.0.1:8888:80"
    volumes:
    - web-content:/usr/local/apache2/htdocs
    networks:
    - front-tier

Principales commandes

docker-compose up -d
docker-compose up -d --force-recreate
docker-compose down

TP

 

Introduction à Docker

https://cours.sewatech.fr/docker/

INSA

FIN

Sewatech