Skip to main content

install-docker-ce-ubuntu-ansible

Comment utiliser Ansible pour installer et configurer Docker sur Ubuntu.

Introduction:

L'automatisation des serveurs joue désormais un rôle essentiel dans l'administration des systèmes, en raison de la nature jetable des environnements applicatifs modernes. Les outils de gestion de la configuration tels qu'Ansible sont généralement utilisés pour rationaliser le processus d'automatisation de la configuration des serveurs en établissant des procédures standard pour les nouveaux serveurs tout en réduisant les erreurs humaines associées aux configurations manuelles.

  • Ansible propose une architecture simple qui ne nécessite pas l’installation de logiciels spéciaux sur les nœuds. Il fournit également un ensemble robuste de fonctionnalités et de modules intégrés qui facilitent l’écriture de scripts d’automatisation.

Ce guide explique comment utiliser Ansible pour automatiser les étapes contenues dans notre guide sur Comment installer et utiliser Docker sur Ubuntu 24.04. Docker est une application qui simplifie le processus de gestion des conteneurs, des processus isolés des ressources qui se comportent de manière similaire aux machines virtuelles, mais qui sont plus portables, plus économes en ressources et dépendent plus fortement du système d'exploitation hôte.

Prérequis

Afin d’exécuter la configuration automatisée fournie par le manuel de ce guide, vous aurez besoin de :

  • Un nœud de contrôle Ansible une machine Ubuntu 24.04 avec Ansible installé et configuré pour se connecter à vos hôtes Ansible à l'aide de clés SSH.
  • Un ou plusieurs hôtes Ansible un ou plusieurs serveurs Ubuntu 24.04 distants préalablement configurés.

Que fait ce playbook ?

Ce manuel Ansible offre une alternative à l'exécution manuelle de la procédure décrite dans notre guide sur l'installation et l'utilisation de Docker sur Ubuntu 24.04. Configurez votre manuel une fois et utilisez-le pour chaque installation ultérieure.

L’exécution de ce playbook effectuera les actions suivantes sur vos hôtes Ansible :

  • Installez aptitude, qui est préféré par Ansible comme alternative au gestionnaire de paquets apt.
  • Installez les packages système requis.
  • Installez la clé Docker GPG APT.
  • Ajoutez le référentiel officiel Docker aux sources apt.
  • Install Docker.
  • Installez le module Python Docker via pip ou apt.
  • Installez le module Python Docker via pip.
  • Extrayez l’image par défaut spécifiée par default_container_image depuis Docker Hub.
  • Créez le nombre de conteneurs défini par la variable container_count, chacun utilisant l'image définie par default_container_image, et exécutez la commande définie dans default_container_command dans chaque nouveau conteneur.

Une fois l’exécution du playbook terminée, vous aurez un certain nombre de conteneurs créés en fonction des options que vous avez définies dans vos variables de configuration.

Pour commencer, connectez-vous à un utilisateur compatible sudo sur votre serveur de nœud de contrôle Ansible.

Étape 1 — Préparation de votre playbook

Le playbook est le fichier où toutes vos tâches sont définies. Une tâche est la plus petite unité d'action que vous pouvez automatiser à l'aide d'un playbook Ansible. Mais d'abord, créez votre fichier playbook à l'aide de votre éditeur de texte préféré :

sudo nano playbook.yml

Cela ouvrira un fichier YAML vide. Avant de vous lancer dans l'ajout de tâches à votre playbook, commencez par ajouter les éléments suivants :

---
- hosts: all
become: true
vars:
container_count: 4
default_container_name: docker
default_container_image: ubuntu
default_container_command: sleep 1

Presque tous les playbooks que vous rencontrez commenceront par des déclarations similaires à celle-ci. hosts déclare quels serveurs le nœud de contrôle Ansible ciblera avec ce playbook. become indique si toutes les commandes seront effectuées avec des privilèges root élevés.

vars vous permet de stocker des données dans des variables. Si vous décidez de les modifier à l'avenir, vous n'aurez qu'à modifier ces lignes individuelles dans votre fichier. Voici une brève explication de chaque variable :

  • container_count : Le nombre de conteneurs à créer.
  • default_container_name : Nom du conteneur par défaut.
  • default_container_image : Image Docker par défaut à utiliser lors de la création de conteneurs.
  • default_container_command : Commande par défaut à exécuter sur les nouveaux conteneurs.

Étape 2 — Ajout de tâches d'installation de packages à votre playbook

Par défaut, les tâches sont exécutées de manière synchrone par Ansible dans l'ordre de haut en bas de votre playbook. Cela signifie que l'ordre des tâches est important et que vous pouvez supposer en toute sécurité qu'une tâche finira de s'exécuter avant que la tâche suivante ne commence.

Toutes les tâches de ce playbook peuvent être autonomes et réutilisées dans vos autres playbooks.

Ajoutez vos premières tâches d'installation d'aptitude, un outil d'interface avec le gestionnaire de paquets Linux, et d'installation des paquets système requis. Ansible s'assurera que ces paquets sont toujours installés sur votre serveur :

tasks:
- name: Install aptitude
apt:
name: aptitude
state: latest
update_cache: true

- name: Install required system packages
apt:
pkg:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- python3-pip
- virtualenv
- python3-setuptools
state: latest
update_cache: true

Ici, vous utilisez le module intégré apt Ansible pour demander à Ansible d'installer vos paquets. Les modules dans Ansible sont des raccourcis pour exécuter des opérations que vous devriez autrement exécuter en tant que commandes bash brutes. Ansible se rabat en toute sécurité sur apt pour l'installation de paquets si aptitude n'est pas disponible, mais Ansible a historiquement préféré aptitude.

Vous pouvez ajouter ou supprimer des paquets à votre guise. Cela garantira que tous les paquets sont non seulement présents, mais également sur la dernière version, et qu'ils sont exécutés après l'appel d'une mise à jour avec apt.

Étape 3 — Ajout de tâches d'installation de Docker à votre playbook

Votre tâche installera la dernière version de Docker à partir du dépôt officiel. La clé GPG de Docker est ajoutée pour vérifier le téléchargement, le dépôt officiel est ajouté en tant que nouvelle source de paquets et Docker sera installé. De plus, le module Docker pour Python sera également installé :

- name: Add Docker GPG apt Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present

- name: Add Docker Repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu focal stable
state: present

- name: Update apt and install docker-ce
apt:
name: docker-ce
state: latest
update_cache: true

- name: Install Docker Module for Python
pip:
name: docker

Si apt_key obsolète, utilisez cette solution:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo
“deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

[Error] ERROR! couldn’t resolve module/action ‘community.docker.docker_image’. This often indicates a misspelling, missing collection, or incorrect module path.

The error appears to be in ‘/mnt/c/Users/deyinche/ansible/pb_install_docker_ce.yaml’: line 50, column 5, but may be elsewhere in the file depending on the exact syntax problem.

Solution:

chmod og-rw ~/.netrc
ansible-galaxy collection install community.docker

Vous verrez que les modules Ansible intégrés apt_key et apt_repository sont d'abord dirigés vers les URL correctes, puis chargés de s'assurer qu'ils sont présents. Cela permet d'installer la dernière version de Docker et d'utiliser pip pour installer le module pour Python.

Étape 4 — Ajout de tâches d'image et de conteneur Docker à votre playbook

La création proprement dite de vos conteneurs Docker commence ici par l'extraction de l'image Docker souhaitée. Par défaut, ces images proviennent du Hub officiel de Docker. En utilisant cette image, les conteneurs seront créés selon les spécifications établies par les variables déclarées en haut de votre playbook :

- name: Pull default Docker image
community.docker.docker_image:
name: "{{ default_container_image }}"
source: pull

- name: Create default containers
community.docker.docker_container:
name: "{{ default_container_name }}{{ item }}"
image: "{{ default_container_image }}"
command: "{{ default_container_command }}"
state: present
with_sequence: count={{ container_count }}
  • docker_image est utilisé pour extraire l'image Docker que vous souhaitez utiliser comme base pour vos conteneurs.

  • docker_container vous permet de spécifier les spécificités des conteneurs que vous créez, ainsi que la commande que vous souhaitez leur transmettre.

  • with_sequence est la façon dont Ansible crée une boucle, et dans ce cas, il va boucler la création de vos conteneurs en fonction du nombre que vous avez spécifié. Il s'agit d'une boucle de comptage de base, donc la variable item fournit ici un nombre représentant l'itération courante de la boucle. Ce nombre est utilisé ici pour nommer vos conteneurs.

Étape 5 — Révision de votre dossier complet playbook

Votre manuel de jeu devrait ressembler à peu près à ce qui suit, avec des différences mineures en fonction de vos personnalisations :


---
- hosts: all
become: true
vars:
container_count: 4
default_container_name: docker
default_container_image: ubuntu
default_container_command: sleep 1d

tasks:
- name: Install aptitude
apt:
name: aptitude
state: latest
update_cache: true

- name: Install required system packages
apt:
pkg:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- python3-pip
- virtualenv
- python3-setuptools
state: latest
update_cache: true

- name: Add Docker GPG apt Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present

- name: Add Docker Repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu focal stable
state: present

- name: Update apt and install docker-ce
apt:
name: docker-ce
state: latest
update_cache: true

- name: Install Docker Module for Python
pip:
name: docker

- name: Pull default Docker image
community.docker.docker_image:
name: "{{ default_container_image }}"
source: pull

- name: Create default containers
community.docker.docker_container:
name: "{{ default_container_name }}{{ item }}"
image: "{{ default_container_image }}"
command: "{{ default_container_command }}"
state: present
with_sequence: count={{ container_count }}

N'hésitez pas à modifier ce manuel pour l'adapter au mieux à vos besoins individuels dans le cadre de votre propre flux de travail. Par exemple, vous pouvez utiliser le module docker_image pour envoyer des images vers Docker Hub ou le module docker_container pour configurer des réseaux de conteneurs.

Une fois que vous êtes satisfait de votre playbook, vous pouvez quitter votre éditeur de texte et enregistrer.

Étape 6 — Exécution de votre playbook

Vous êtes maintenant prêt à exécuter ce manuel sur un ou plusieurs serveurs. La plupart des manuels sont configurés pour être exécutés sur chaque serveur de votre inventaire par défaut, mais vous devrez spécifier votre serveur cette fois.

Pour exécuter le playbook uniquement sur le serveur 1, en vous connectant en tant que ubuntu, vous pouvez utiliser ce qui suit:

ansible-playbook  -l host.yml -u ubuntu playbook.yml
ansible-playbook -i host.yml -u ubuntu playbook.yml --ask-pass

L'indicateur -l spécifie votre serveur et l'indicateur -u spécifie à quel utilisateur se connecter sur le serveur distant. Le flag --ask-pass va vous permettre de saisir le mot de passe de votre serveur si vous avez pas de clés SSH

Conclusion

L'automatisation de la configuration de votre infrastructure peut non seulement vous faire gagner du temps, mais elle permet également de garantir que vos serveurs suivent une configuration standard qui peut être adaptée à vos besoins. Compte tenu de la nature distribuée des applications modernes et de la nécessité d'assurer la cohérence entre les différents environnements de mise à disposition, ce type d'automatisation est devenu un élément central des processus de développement de nombreuses équipes.