Installation de docker et utilisation avec Ansible
Pour fêter la sortie d'Ansible v2, je vous propose un petit article sur l'utilisation de mes deux passe-temps du moment : Docker et Ansible
Le premier est très à la mode dans le monde de l'intégration continue. Sans rentrer dans les détails, j'y ai vu un moyen assez simple de faire des tests sur plusieurs types de distribution sans avoir à trop me casser la tête. D'autant que la dernière version d'Ansible embarque un connecteur natif docker.
Nous allons donc voir comment faire fonctionner tout ceci ensemble.
Installation de docker
De ce côté, rien de particulier à signaler. Sous Ubuntu, il vous faudra rajouter une source (en fonction de votre version d'Ubuntu) et sous CentOS, il vous faudra rajouter le repository extras dans vos dépendances.
Ci-dessous les instructions sous Ubuntu :
- Suivre les instructions dans l'article d'installation de docker sous Ubuntu.
- Installation de la librairie docker-py (nécessaire pour la communication d'Ansible avec docker) : pip install docker-py
Sous CentOS :
- Suivre le tuto d'installation de docker sous CentOS.
- Installer le package docker-py avec yum : yum install docker-py
- Démarrer le service docker : service docker start
Voilà, passons à la suite.
Installation d'Ansible
Il vous faudra tout d'abord une version installée d'Ansible v2 (par la suite, j'utiliserai la 2.0.0.2). Pour vous en assurer, vous pouvez lancer la commande suivante : ansible --version
Pour installer une version, je vous laisse consulter l'article d'installation d'Ansible.
Création de container docker
Nous allons tout d'abord créer un playbook qui va nous permettre de créer nos images docker :
- name: "create docker container" hosts: docker-server gather_facts: no tasks: - docker: name={{item}} image=centos command="sleep 3600" state=started with_items: groups['docker-container']
NB : tous les exemples dans cet article sont récupérables à l'adresse suivante
L'astuce de ce playbook est de s'appuyer sur la variable groups['docker-container'] avec un with_items pour indiquer la liste des containers docker à créer.
Nous nous appuierons également sur le fichier d'inventaire suivant :
[docker-server] localhost [docker-container] docker1 docker2 [docker-container:vars] ansible_connection=docker ansible_remote_user=root
Nous allons ensuite lancer la création de nos containers :
ansible-playbook -i hosts docker-example/create-docker.yml
Vous devriez obtenir, si tout se passe bien, le résultat suivant :
PLAY [create docker container] ************************* TASK [docker] ****************************************** changed: [localhost] => (item=docker1) changed: [localhost] => (item=docker2) PLAY RECAP ******************************************** localhost : ok=1 changed=1 unreachable=0 failed=0
Un rapide coup d'oeil avec docker ps nous indiquera ce qui vient d'être créé :
CONTAINER ID IMAGE COMMAND CREATED [...] NAMES d8bbda43b241 centos "sleep 3600" 50 seconds ago [...] docker2 e34ed4b637b9 centos "sleep 3600" 50 seconds ago [...] docker1
Utilisation des containers dans Ansible
Pour ainsi dire, le travail est terminé. Prenons tout de même un exemple de playbook :
- name: "create docker container" hosts: docker-container gather_facts: no tasks: - copy: dest=/tmp/{{item}} content=test with_items: [ test1, test2, test3 ]
Lançons ce playbook pour voir ce que nous allons obtenir :
PLAY [create docker container] ******************************* TASK [copy] ************************************************** changed: [docker2] => (item=test1) changed: [docker2] => (item=test2) changed: [docker2] => (item=test3) changed: [docker1] => (item=test1) changed: [docker1] => (item=test2) changed: [docker1] => (item=test3) PLAY RECAP ************************************************** docker1 : ok=1 changed=1 unreachable=0 failed=0 docker2 : ok=1 changed=1 unreachable=0 failed=0
Voilà, ça sera tout pour aujourd'hui !