Outils pour utilisateurs

Outils du site


informatique:docker

Docker

Docker propose des conteneurs logiciels, les conteneurs partagent le même système d'exploitation (noyaux, processus d'initialisation, drivers réseaux …).

Principes

Docker propose un certains nombre d'images « standard » notamment:

  • Ubuntu
  • Debian
  • CentOS

Toute les images sont dérivé de ces trois images via un système d'héritage. Chaque image est créé depuis l'état de base d'une de ces images et y ajoute des fonctionnalités (installation d'un logiciel, configuration d'un automatisme…) et il est possible de faire hériter une image d'une autre image qui hérite elle même d'une autre image et cela de façon infini.

De plus Docker offre un mécanisme très intéressant pour minimiser la taille de disque nécessaire à la mise en place de ces images. Docker met en place le système de fichier UnionFS (a layered copy-on-write filesystem, which means that the container image's filesystem is a culmination of multiple read-only filesystem layers. And these layers are shared between running containers) pour le système de fichier de ses conteneurs et de ses images. Celui-ci permet de monter plusieurs systèmes de fichier sur un unique point de montage dans un ordre précis, le fichier utilisé pour un chemin sera le dernier monté.

Docker propose un dépôt communautaire appelé le Hub Repository qui propose les images de base des différentes distributions mais aussi des images officiels empaquetant des logiciels près à l'emploi comme MySQL ou PHP … Voir aussi le pendant en mode Dockerfile http://dockerfile.github.io

La pile Docker est composer d'une daemon (needs root privileges) qui s'occupe de faire “tourner” les conteneurs, et d'un client (no root privileges) pour interagir avec le daemon (via a RESTful API on default port 2375).

L'isolation des conteneurs est réalisée avec les Namespaces (namespace doc) du noyau Linux, la limitation des ressources avec les Control groups (cgroups v1 / v2). Aussi par défaut, modifiable avec –cap-add –privileged –security-opts, l'utilisateur root est limité, certains privilèges lui sont retirés:

  • Mount/unmount devices
  • Managing raw sockets
  • Filesystem operations such as creating device nodes and changing file ownerships

Deux modes de fonctionnements pour les conteneurs: le mode interactif et le mode daemon. Le mode interactif lance le conteneur au premier plan et vous permet d'intéragir avec lui, tandis que le mode daemon lance le conteneur en arrière plan et rend la main.

Docker recommande un seul processus par conteneur. Mais la commande exec (docker v1.3+) permet d'injecter un processus pour se “connecter” à un conteneur en exécution.

Docker affecte une adresse ip à chacun des conteneurs. Pour faciliter les connexions entre eux il y a les links de la forme –link CONTAINER_IDENTIFIER:ALIAS.

La construction d'image Dockerfile peut-être décrite dans un fichier Dockerfile (like a Makefile).

Documentation

Docker et la tendance de la conteneurisation : a-t-elle vraiment été en production ? 2016-10-09

Cheat sheets:

Tutos

Livres:

Installation

$ cat /etc/apt/sources.list.d/docker.list 
# Docker
# https://docs.docker.com/engine/installation/debian/#debian-jessie-80-64-bit
#
# PGP Key:
# apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
 
deb https://apt.dockerproject.org/repo debian-jessie main

Ajouter son user au group docker

$ sudo groupadd docker # Adds the docker group (s'il n'existe pas déjà)
$ sudo gpasswd -a $(whoami) docker # Adds the current user to the docker group
$ sudo service docker restart
# logout / login for changes takes effect

Commandes

docker run

Lancer un conteneur:

  # mode interactif:
  # -i active le mode interactif,
  # -t active le mode tty qui permet d'afficher la sortie standard
  docker run -t -i ubuntu:latest

if you are running short-term foreground processes, add –rm option.

Voir reference/run

docker start

Relancer un container arrếté (exited)

  docker start -i <ID>

docker ps

Lister les conteneurs:

  # -a pour tous les conteneurs, quelque soit leur statut (up, exited, terminated)
  docker ps -a
  CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
  ...

docker inspect

  # 
  docker inspect <nom ou id>
  ...

docker exec

Pour lancer un nouveau processus dans un conteneur en cours d'exécution, par exemple un shell pour inspecter son état de santé :

  # 
  $ docker exec -it <nom ou id> bash
  ...

docker images

Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

  -a, --all            Show all images (default hides intermediate images)
  --digests            Show digests
  -f, --filter=[]      Filter output based on conditions provided
  --help               Print usage
  --no-trunc           Don't truncate output
  -q, --quiet          Only show numeric IDs

docker commit

docker save

 docker save -o <save image filename> <image name>

ou

 docker save <image name> | bzip2 > -o <save image filename.bz2>

docker cp

Pour copier un fichier du container vers le host;

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

docker volume rm

docker volume rm [OPTIONS] VOLUME [VOLUME...]

Dockerfile

Orchestration

With Docker Machine, we have provisioned the Docker daemons. With Docker Swarm, we can rest assured that we'll be able to control our containers from anywhere and that they'll remain available if there are any failures. Docker Compose helps us compose our distributed applications on top of this cluster.

Swarm

Ajoute au Docker client des fonctionnalités (libswarm) de gestion de cluster.

https://github.com/docker/swarm/

Compose (docker-composer)

Docker Compose permet de créer et configurer un ensemble de conteneurs avec un fichier YAML.

Tutos / Exemples:

Docker Machine