Table des matières

,

Docker pour le dev local

Atelier animé par Augustin Riedinger développeur freelance lors du capitole du libre 2017. Les ressources pour participer à cet atelier ont été mises à disposition par A. Riedinger aux 'URLs suivantes:

Installation de L'environnement de travail

Prérequis

Ubuntu 14.04

$ sudo apt-get install docker.io
$ sudo pip install docker-compose==1.3.0
Veiller à bien spécifier la version de docker-compose car la dernière version utilisera un client docker trop récent par rapport à la version du serveur proposée par le dépôt apt et l'erreur suivante pourra se présenter:
ERROR: client and server don't have same version (client : 1.21, server: 1.18)

Ajouter votre utilisateur dans le groupe docker

$ sudo usermod --append -G docker $USER
$ newgrp docker
Ajouter l'utilisateur au groupe docker permet d’éviter l'erreur suivante à l'appel de docker-compose:
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Debian 9

Les alias

Les alias de commandes ci-dessous n'ont rien d'obligatoire, ils permettent de simplifier les commandes de gestion des instances docker:

$ alias docker-enter="docker-compose run --rm --service-ports app /bin/bash"
$ alias docker-enter-again="docker-compose run --rm app /bin/bash"
$ alias docker-clean="docker ps -a | grep 'Exited\|Created' | cut -d ' ' -f 1 | xargs docker rm"

Pourquoi utiliser docker?

Pour certains projets vous aurez besoin de versions spécifiques des BD, des framework, et si vous travaillez sur plusieurs projets vous rencontrerez rapidement des problèmes de compatibilité entre les différentes versions des bibliothèques installées dans votre environnement de développement.

La solution apportée par la virtualisation virtualbox/vagrant coûte bien plus cher en ressources système.

Les containers s’exécutent sur le même système d'exploitation. Ils sont isolés des autres applications et partagent les binaires, les bibliothèques lorsque c'est approprié.

Tutoriel 1

Tutoriel d'introduction de type “Hello World”. On va exécuter un serveur web Flask avec une application minimale dans un container docker. Flask est un serveur web léger capable de servir des applications écrites en Python.

Cloner le dépôt git:

$ git clone https://github.com/augnustin/docker-local-tutorial
 
# Se placer dans le répertoire du tutoriel
$ cd docker-local-tutorial/tutorial/1-boilerplate

Le dossier contient les fichiers suivants

.
├── docker-compose.yml
├── Dockerfile
└── hello.py

La commande suivante utilise docker-compose pour démarrer le processus en environnement cloisonné:

$ docker-compose run --rm --service-ports app /bin/bash

Le prompt a changé, les commandes suivantes seront exécutes dans l'instance docker:

# Installation de pip le gestionaire de paquets python
apt-get update && apt-get install python-pip
 
# Installation du serveur web Flask
pip install Flask 

La portée de ces commandes est limitée au container docker. L'installation des paquets n'a lieu que dans le container, le système n'est pas modifié.

Maintenant que le serveur Flask est installer dans le container on peut lui faire servir notre application présente dans le dossier courant:

FLASK_APP=hello.py flask run

Le serveur Flask s'execute à présent, pour vérifier le fonctionnement du service ouvrir un navigateur a l'URL suivante http://localhost:5000/

Fonctionnement

A propos des principaux fichier de configuration

Le Dockerfile

Ici le Dokerfile présente sa version la plus épurée. Il contient la référence du fichier image à utiliser:

FROM ubuntu:saucy

Dans l'exemple ci-dessus l'image à utiliser est dans le dépot officiel ubuntu, elle a le tag saucy.

docker-compose.yml

docker-compose est un utilitaire permettant de paramétrer plus simplement les instances docker à l'aide de fichier texte utilisant la syntaxe YAML.

Le fichier pour le tutoriel se présente ainsi:

app:
  build: .
  volumes:
    - .:/app
  ports:
    - "5000:5000"

Dans cet exemple:

docker-compose fichier yaml

app: le nom du container

volumes:
  - .:/app le dossier courant de la machine est lié a /app du container

Dans docker on a ds images dans docker 2 temps

docker-compose utilise le ficheir de configuration de

un container par service, on utilise l'image officielle de

docker-compose va nous permettre d'interconnecter les containers entre eux.

Pour créer un container soit image soit build avec en attribut le Dockerfile

alias docker-enter-again permet de reouvrir une session pour les commandes dans le container sans ecouter sur les ports

commandes permettant de lister les instances docker s’exécutant sur la machine

docker ps -a

Lister les images construites ou téléchargées

docker images

Références