Ceci est une ancienne révision du document !
Table des matières
Version - 2022.02
Dernière mise-à-jour : 2022/05/17 08:05
LCF704 - Facts, Facts Secrets et Docker
Contenu du Module
- LCF704 - Facts, Facts Secrets et Docker
- Contenu du Module
- LAB #1 - Utilisation des Facts d'Ansible
- LAB #2 - La Commande ansible-vault
- 2.1 - Crypter le Fichier
- 2.2 - Editer le Fichier
- 2.3 - Décrypter le Fichier
- 2.4 - Utilisation de Mots de Passe Aléatoires
- LAB #3 - Ansible et Docker
- 3.1 - Présentation de Docker
- 3.2 - Installer Docker
- 3.3 - La Connexion à Docker
LAB #1 - Utilisation des Facts d'Ansible
Ansible Facts sont :
- des variables collectées automatiquement par le module setup d'Ansible lors du contrôle à distance d'un hôte,
- spécifiques à l'hôte concerné.
Il est cependant possible d'exécuter ce module manuellement afin de voir les Facts collectées :
[trainee@centos8 roles]$ ansible all -i web01, -m setup | more web01 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.0.2.54" ], "ansible_all_ipv6_addresses": [ "fe80::d255:17e1:74c1:306e" ], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "04/01/2014", "ansible_bios_vendor": "SeaBIOS", "ansible_bios_version": "rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org", "ansible_board_asset_tag": "NA", "ansible_board_name": "NA", "ansible_board_serial": "NA", "ansible_board_vendor": "NA", "ansible_board_version": "NA", "ansible_chassis_asset_tag": "NA", "ansible_chassis_serial": "NA", "ansible_chassis_vendor": "QEMU", "ansible_chassis_version": "pc-i440fx-5.2", "ansible_cmdline": { "BOOT_IMAGE": "/boot/vmlinuz-4.9.0-8-amd64", "quiet": true, "ro": true, "root": "UUID=b29b93ed-8de4-4980-a407-15bba3ad09ba" }, "ansible_date_time": { "date": "2022-03-09", "day": "09", "epoch": "1646840799", "hour": "16", "iso8601": "2022-03-09T15:46:39Z", "iso8601_basic": "20220309T164639891872", "iso8601_basic_short": "20220309T164639", "iso8601_micro": "2022-03-09T15:46:39.891872Z", "minute": "46", "month": "03", "second": "39", "time": "16:46:39", "tz": "CET", "tz_dst": "CEST", "tz_offset": "+0100", "weekday": "mercredi", "weekday_number": "3", "weeknumber": "10", "year": "2022" }, "ansible_default_ipv4": { "address": "10.0.2.54", "alias": "ens18", "broadcast": "10.0.2.255", "gateway": "10.0.2.1", --More--
Important : Notez que le nom de chaque Fact commence par ansible_. Évitez donc de créer des variables commençant var cette valeur !
Parmi les Facts, les plus utiles sont :
- “ansible_hostname”: “web01”,
- “ansible_fqdn”: “web01.i2tch.loc”,
- “ansible_architecture”: “x86_64”,
- “ansible_distribution”: “Debian”,
- “ansible_distribution_major_version”: “9”,
- “ansible_distribution_version”: “9.7”,
- “ansible_os_family”: “Debian”,
- “ansible_memtotal_mb”: 240,
- “ansible_processor_cores”: 1,
- “ansible_virtualization_role”: “guest”.
Ainsi que dictionnaire ansible_default_ipv4 :
"ansible_default_ipv4": { "address": "10.0.2.54", "alias": "ens18", "broadcast": "10.0.2.255", "gateway": "10.0.2.1", "interface": "ens18", "macaddress": "de:b9:d4:17:cd:da", "mtu": 1500, "netmask": "255.255.255.0", "network": "10.0.2.0", "type": "ether" },
Modifiez le fichier inventory en mettant les deux machines TargetA et TargetB dans le groupe linux :
[trainee@centos8 roles]$ vi inventory [trainee@centos8 roles]$ cat inventory [linux] targeta targetb [group1] localhost ansible_connection=local [basededonnees] web01 [dotcms] web02 web03 [equilibrage] web04 [debian:children] basededonnees dotcms equilibrage [debian:vars] ansible_user=trainee
Modifiez le fichier playbook.yaml afin d'utiliser le Rôle exemple01.java en tant qu'utilisateur privilégié :
[trainee@centos8 roles]$ vi playbook.yaml [trainee@centos8 roles]$ cat playbook.yaml --- - hosts: all become: true roles: - exemple01.java
Connectez-vous à la machine TargetA et supprimez le paquet openjdk-8-jre :
[trainee@centos8 roles]$ ssh 10.0.2.52 Debian GNU/Linux 9 Linux targeta.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Mar 9 11:29:25 2022 from 10.0.2.45 trainee@targeta:~$ sudo apt-get -y remove openjdk-8-jre ... trainee@targeta:~$ exit déconnexion Connection to 10.0.2.52 closed. [trainee@centos8 roles]$
Utilisez la commande scp pour copier le fichier authorized_keys de la machine virtuelle centos8 vers la machine virtuelle targetb :
[trainee@centos8 roles]$ cd ~ [trainee@centos8 ~]$ scp .ssh/authorized_keys trainee@10.0.2.53:/home/trainee/.ssh/authorized_keys trainee@10.0.2.53's password: authorized_keys 100% 888 8.9KB/s 00:00 [trainee@centos8 ~]$ cd - /home/trainee/.ansible/roles [trainee@centos8 roles]$
Connectez-vous à la machine TargetB et supprimez le paquet java-1.8.0-openjdk :
[trainee@centos8 roles]$ ssh 10.0.2.53 Last login: Wed Mar 9 16:51:41 2022 from 10.0.2.45 [trainee@targetb ~]$ sudo yum -y remove java-1.8.0-openjdk ... [trainee@targetb ~]$ exit logout Connection to 10.0.2.53 closed. [trainee@centos8 roles]$
Grâce au Fact ansible_os_family il est possible d'appliquer le fichier /home/trainee/.ansible/roles/exemple01.java/tasks/main.yaml aux deux distributions. Notez l'utilisation de la clause when :
[trainee@centos8 roles]$ vi exemple01.java/tasks/main.yaml [trainee@centos8 roles]$ cat exemple01.java/tasks/main.yaml --- - name: install jre (Debian) package: name=openjdk-8-jre state=present when: ansible_os_family == 'Debian' - name: install jre (CentOS) package: name=java-1.8.0-openjdk state=present when: ansible_os_family == 'RedHat'
Modifiez le fichier /etc/hosts de la machine centos8 :
[trainee@centos8 roles]$ su - Password: fenestros [root@centos8 ~]# vi /etc/hosts [root@centos8 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.2.45 centos8.ittraining.loc centos8 10.0.2.54 web01.i2tch.loc web01 10.0.2.55 web02.i2tch.loc web02 10.0.2.56 web03.i2tch.loc web03 10.0.2.57 web04.i2tch.loc web04 10.0.2.52 targeta.i2tch.loc targeta 10.0.2.53 targetb.i2tch.loc targetb [root@centos8 ~]# exit logout [trainee@centos8 roles]$
Connectez-vous en ssh à targeta et testez la configuration de sudo :
[trainee@centos8 roles]$ ssh targeta The authenticity of host 'targeta (10.0.2.52)' can't be established. ECDSA key fingerprint is SHA256:sEfHBv9azmK60cjqF/aJgUc9jg56slNaZQdAUcvBOvE. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'targeta' (ECDSA) to the list of known hosts. Debian GNU/Linux 9 Linux targeta.i2tch.loc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Mar 9 16:52:16 2022 from 10.0.2.45 trainee@targeta:~$ sudo apt update Réception de:1 http://security.debian.org/debian-security stretch/updates InRelease [53,0 kB] Ign:2 http://ftp.fr.debian.org/debian stretch InRelease Réception de:3 http://ftp.fr.debian.org/debian stretch-updates InRelease [93,6 kB] Réception de:4 http://ftp.fr.debian.org/debian stretch Release [118 kB] Réception de:5 http://ftp.fr.debian.org/debian stretch Release.gpg [3 177 B] Réception de:6 http://security.debian.org/debian-security stretch/updates/main Sources [396 kB] Réception de:7 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [759 kB] Réception de:8 http://security.debian.org/debian-security stretch/updates/main Translation-en [354 kB] Réception de:9 http://ftp.fr.debian.org/debian stretch/main Sources [6 736 kB] Réception de:10 http://ftp.fr.debian.org/debian stretch/main amd64 Packages [7 080 kB] Réception de:11 http://ftp.fr.debian.org/debian stretch/main Translation-en [5 377 kB] 21,0 Mo réceptionnés en 7s (2 753 ko/s) Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait 333 packages can be upgraded. Run 'apt list --upgradable' to see them. trainee@targeta:~$ exit déconnexion Connection to targeta closed.
Connectez-vous en ssh à targetb et testez la configuration de sudo :
[trainee@centos8 roles]$ ssh targetb The authenticity of host 'targetb (10.0.2.53)' can't be established. ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'targetb' (ECDSA) to the list of known hosts. Last login: Wed Mar 9 16:56:33 2022 from 10.0.2.45 [trainee@targetb ~]$ yum clean all Loaded plugins: fastestmirror, langpacks Cleaning repos: base extras updates Other repos take up 190 M of disk space (use --verbose for details) [trainee@targetb ~]$ sudo yum -y makecache Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.mirror.ate.info * extras: mirror.plusserver.com * updates: mirror.plusserver.com base | 3.6 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/6): extras/7/x86_64/other_db | 147 kB 00:00:00 (2/6): base/7/x86_64/filelists_db | 7.2 MB 00:00:00 (3/6): base/7/x86_64/other_db | 2.6 MB 00:00:00 (4/6): extras/7/x86_64/filelists_db | 277 kB 00:00:00 (5/6): updates/7/x86_64/other_db | 1.0 MB 00:00:00 (6/6): updates/7/x86_64/filelists_db | 7.8 MB 00:00:00 Metadata Cache Created [trainee@targetb ~]$ exit logout Connection to targetb closed. [trainee@centos8 roles]$
Exécutez ansible-playbook et constatez le résultat :
[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l linux PLAY [all] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* ok: [targeta] ok: [targetb] TASK [exemple01.java : install jre (Debian)] ********************************************************************************************************************************************************************* skipping: [targetb] changed: [targeta] TASK [exemple01.java : install jre (CentOS)] ********************************************************************************************************************************************************************* skipping: [targeta] changed: [targetb] PLAY RECAP ******************************************************************************************************************************************************************************************************* targeta : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 targetb : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Les conditions peuvent être combinées grâce à and et or. En voici un exemple :
tasks: - name: "Extinction des systèmes CentOS 6 et Debian 7" command: /sbin/shutdown -t now when: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "6") or (ansible_distribution == "Debian" and ansible_distribution_major_version == "7")
LAB #2 - La Commande ansible-vault
La commande ansible-vault permet de créer et d'utiliser des fichiers cryptés, par exemple, ceux qui contiennent des mots de passe.
Pour illustrer son utilisation, créez le Rôle vault :
[trainee@centos8 roles]$ mkdir vault
Éditez le fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
[trainee@centos8 roles]$ vi /home/trainee/.ansible/roles/group_vars/all.yaml [trainee@centos8 roles]$ cat /home/trainee/.ansible/roles/group_vars/all.yaml --- secret: gardezmoisecret
Modifiez le fichier /home/trainee/.ansible/roles/playbook.yaml :
[trainee@centos8 roles]$ vi playbook.yaml [trainee@centos8 roles]$ cat playbook.yaml --- - hosts: all tasks: - debug: msg: "Le secret est {{ secret }}"
Exécutez la commande ansible-playbook :
[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l localhost PLAY [all] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* ok: [localhost] TASK [debug] ***************************************************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Le secret est gardezmoisecret" } PLAY RECAP ******************************************************************************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Important : L'exécution démontre que la variable secret est bien lue.
2.1 - Crypter le Fichier
Cryptez maintenant le fichier /home/trainee/.ansible/roles/group_vars/all.yaml en utilisant la commande ansible-vault :
[trainee@centos8 roles]$ ansible-vault encrypt group_vars/all.yaml New Vault password: fenestros Confirm New Vault password: fenestros Encryption successful [trainee@centos8 roles]$
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Important : Notez que le mot de passe est pour la commande ansible-vault et non pas uniquement pour l'action de cryptage en cours.
Constatez maintenant le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
[trainee@centos8 roles]$ cat /home/trainee/.ansible/roles/group_vars/all.yaml $ANSIBLE_VAULT;1.1;AES256 33343664333931323331346338346439613439633633396262393733663463363438663163383761 6566653230323032396434356132653262313962633265630a366436666261363933343663623131 63373230663530313864373236316465333464323131643933363664303332336261353732623064 3538303864633035320a376235333637656534376638613661303765373165383936653336646562 31376535333861616165346433306230366231333139323062366432333033386366
Exécutez de nouveau la commande ansible-playbook :
[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l localhost PLAY [all] ******************************************************************************************************************************************************************************************************* ERROR! Attempting to decrypt but no vault secrets found
Important : Notez l'erreur due au fait que le fichier a été crypté.
Pour indiquer à la commande ansible-playbook que le fichier qui doit être lu soit crypté, utilisez l'option –ask-vault-pass :
[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l localhost PLAY [all] ******************************************************************************************************************************************************************************************************* ERROR! Attempting to decrypt but no vault secrets found [trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l localhost --ask-vault-pass Vault password: fenestros PLAY [all] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* ok: [localhost] TASK [debug] ***************************************************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Le secret est gardezmoisecret" } PLAY RECAP ******************************************************************************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Important : Notez que le mot de passe fenestros ne sera pas en clair.
2.2 - Editer le Fichier
Pour éditer le fichier, utilisez la sous-commande edit de la commande ansible-vault :
[trainee@centos8 roles]$ ansible-vault edit group_vars/all.yaml Vault password: fenestros
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Le fichier est chargé en mémoire pour édition :
--- secret: gardezlesecret ~ ~ ~ ~ ~ ~ ~ ~ -- INSERT --
Modifiez le secret et sauvegardez le fichier :
--- secret: gardezlesecret ~ ~ ~ ~ ~ ~ ~ ~ :x
Constatez que le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml est toujours crypté :
[trainee@centos8 roles]$ cat /home/trainee/.ansible/roles/group_vars/all.yaml $ANSIBLE_VAULT;1.1;AES256 36633861376466313363373336643832646663666334633931663262666361306236386232316461 3331633863386666626230663038653136653830303465660a353337316634363465663962336365 61396430313965653666333738376663336139613566636437353935653232306264336235333538 6439366539653436310a666361313237623137666634663439343132393532623962353163303364 37626635363832333934363930383265313932663230356234343235643935353535
Exécutez de nouveau la commande ansible-playbook avec l'option –ask-vault-pass :
[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l localhost --ask-vault-pass Vault password: fenestros PLAY [all] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* ok: [localhost] TASK [debug] ***************************************************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Le secret est gardezlesecret" } PLAY RECAP ******************************************************************************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Important : Notez que le mot de passe fenestros ne sera pas en clair.
2.3 - Décrypter le Fichier
Il est possible de décrypter le fichier en utilisant la sous-commande decrypt de la commande ansible-vault :
[trainee@centos8 roles]$ ansible-vault decrypt group_vars/all.yaml Vault password: fenestros Decryption successful
Important : Notez que le mot de passe fenestros ne sera pas en clair.
Constatez que le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml n'est plus crypté :
[trainee@centos8 roles]$ cat /home/trainee/.ansible/roles/group_vars/all.yaml --- secret: gardezlesecret
2.4 - Utilisation de Mots de Passe Aléatoires
Installez le paquet pwgen :
[trainee@centos8 roles]$ su - Password: fenestros [root@centos8 ~]# [root@centos8 ~]# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm Last metadata expiration check: 1:30:37 ago on Wed 09 Mar 2022 10:10:01 EST. epel-release-latest-8.noarch.rpm 47 kB/s | 22 kB 00:00 Dependencies resolved. ================================================================================================================================================================================================================== Package Architecture Version Repository Size ================================================================================================================================================================================================================== Installing: epel-release noarch 8-14.el8 @commandline 22 k Transaction Summary ================================================================================================================================================================================================================== Install 1 Package Total size: 22 k Installed size: 32 k Is this ok [y/N]: y Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : epel-release-8-14.el8.noarch 1/1 Running scriptlet: epel-release-8-14.el8.noarch 1/1 Verifying : epel-release-8-14.el8.noarch 1/1 Installed products updated. Installed: epel-release-8-14.el8.noarch Complete! [root@centos8 ~]# dnf install pwgen Extra Packages for Enterprise Linux 8 - x86_64 1.1 MB/s | 11 MB 00:09 Extra Packages for Enterprise Linux Modular 8 - x86_64 530 kB/s | 979 kB 00:01 Last metadata expiration check: 0:00:01 ago on Wed 09 Mar 2022 11:41:14 EST. Dependencies resolved. ================================================================================================================================================================================================================== Package Architecture Version Repository Size ================================================================================================================================================================================================================== Installing: pwgen x86_64 2.08-3.el8 epel 31 k Transaction Summary ================================================================================================================================================================================================================== Install 1 Package Total download size: 31 k Installed size: 46 k Is this ok [y/N]: y [root@centos8 ~]# exit logout [trainee@centos8 roles]$
Utilisez maintenant la commande pwgen pour générer un mot de passe aléatoire :
[trainee@centos8 roles]$ pwgen 16 1 di3Be1AiPayeehai
Utilisez pwgen pour créer un mot de passe aléatoire contenu dans un fichier :
[trainee@centos8 roles]$ pwgen 16 1 > vault-password [trainee@centos8 roles]$ ls backend.j2 debug exemple01.java geerlingguy.java group_vars haproxy host_vars inventory playbook.yaml tomcat vault vault-password [trainee@centos8 roles]$ cat vault-password oo3aeph5PaiVeiBu
Utilisez maintenant le mot de passe aléatoire contenu dans le fichier vault-password pour crypter le fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
[trainee@centos8 roles]$ ansible-vault encrypt group_vars/all.yaml --vault-password-file vault-password Encryption successful
Constatez le contenu du fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
[trainee@centos8 roles]$ cat group_vars/all.yaml $ANSIBLE_VAULT;1.1;AES256 61326364653334653935643735623863353362333536396638356362376631633732306332316661 6662333436336237346433363637393666623165643438620a343436366136386637343238303063 38383866386631363834623461323334313030623136333334646335626165363263373966373663 3137333330653635620a396133346264656335633530353966383930613731626639393631623066 31323331383563373830306331653166326563333135326631363461313666313864
Exécutez de nouveau la commande ansible-playbook avec l'option –vault-password-file :
[trainee@centos8 roles]$ ansible-playbook -i inventory playbook.yaml -l localhost --vault-password-file vault-password PLAY [all] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* ok: [localhost] TASK [debug] ***************************************************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Le secret est gardezlesecret" } PLAY RECAP ******************************************************************************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
LAB #3 - Ansible et Docker
3.1 - Présentation de Docker
Docker est une application de virtualisation légère qui utilise des images et des conteneurs.
Une image est un paquet exécutable contenant tout ce qu'il est nécessaire afin d'exécuter un logiciel donné, incluant :
- le code
- un runtime
- des bibliothèques,
- des variables d'environnement
- des fichiers de configuration
Un conteneur est une instance de l'image en cours d'exécution en mémoire. Elle est isolée de l'environnement de l'hôte par défaut mais peut accéder à des fichiers et de ports de l'hôte selon la configuration.
Les conteneurs exécutent des applications nativement en utilisant le noyau de la machine hôte. De ce fait les performances d'un conteneur sont supérieures à celles d'une machine virtuelle qui doit passer par un hyperviseur pour accéder aux ressources de la machine hôte :
Docker existe en deux versions Docker-CE (Docker Community Edition) et Docker-EE (Docker Enterprise Edition). Pour consulter les différences entre les deux versions, consultez le lien https://docs.docker.com/engine/installation/.
3.2 - Installer docker
Docker n'est pas dans le dépôts de CentOS. Afin de l'installer il convient d'ajouter le dépôt de docker :
[trainee@centos8 roles]$ su - Password: fenestros [root@centos8 ~]# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo [root@centos8 ~]# dnf list docker-ce Docker CE Stable - x86_64 83 kB/s | 20 kB 00:00 Last metadata expiration check: 0:00:01 ago on Wed 09 Mar 2022 12:38:58 EST. Available Packages docker-ce.x86_64 3:20.10.12-3.el8 docker-ce-stable
Installez ensuite la dépendance containerd de docker-ce :
[root@centos8 ~]# dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm Last metadata expiration check: 0:06:03 ago on Wed 09 Mar 2022 12:38:58 EST. containerd.io-1.2.10-3.2.el7.x86_64.rpm 13 MB/s | 23 MB 00:01 Dependencies resolved. ================================================================================================================================================================================================================== Package Architecture Version Repository Size ================================================================================================================================================================================================================== Installing: containerd.io x86_64 1.2.10-3.2.el7 @commandline 23 M replacing runc.x86_64 1.0.2-1.module_el8.5.0+911+f19012f9 Transaction Summary ================================================================================================================================================================================================================== Install 1 Package Total size: 23 M Is this ok [y/N]: y
Installez maintenant le paquet docker-ce :
[root@centos8 ~]# dnf install docker-ce --nobest -y
Dernièrement, vérifiez le statut et la version de Docker client et serveur :
[root@centos8 ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: activating (start) since Wed 2022-03-09 12:48:23 EST; 51s ago Docs: https://docs.docker.com Main PID: 59410 (dockerd) Tasks: 16 Memory: 37.7M CGroup: /system.slice/docker.service └─59410 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.125986199-05:00" level=info msg="Starting up" Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128455293-05:00" level=info msg="parsed scheme: \"unix\"" module=grpc Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128518502-05:00" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128568972-05:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0 <nil>}] <> Mar 09 12:48:23 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:23.128603681-05:00" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105356011-05:00" level=info msg="parsed scheme: \"unix\"" module=grpc Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105423457-05:00" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105455755-05:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0 <nil>}] <> Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.105470536-05:00" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc Mar 09 12:48:28 centos8.ittraining.loc dockerd[59410]: time="2022-03-09T12:48:28.106759173-05:00" level=error msg="Failed to built-in GetDriver graph btrfs /var/lib/docker" [root@centos8 ~]# docker --version Docker version 20.10.12, build e91ed57 [root@centos8 ~]# docker version Client: Docker Engine - Community Version: 20.10.12 API version: 1.40 Go version: go1.16.12 Git commit: e91ed57 Built: Mon Dec 13 11:45:22 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 19.03.15 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 99e3ed8919 Built: Sat Jan 30 03:15:19 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683
Important - Docker est composé de trois éléments : un serveur, un client et un ou plusieurs Repositories ou Dépôts en français.
Démarrez un conteneur dénommé postgresql en mode détaché à partir d'une image CentOS :
[root@centos8 ~]# docker run -d --name postgresql centos sleep infinity Unable to find image 'centos:latest' locally latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest 1028e25f81d14d685678794902cd599aa618eb283d80e274526d71ec9708e69d
Vérifiez que le conteneur fonctionne :
[root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1028e25f81d1 centos "sleep infinity" About a minute ago Up 30 seconds postgresql [root@centos8 ~]# exit logout [trainee@centos8 roles]$
3.3 - La Connexion à Docker
Créez maintenant le Rôle docker :
trainee@ansible:~/.ansible/roles$ mkdir docker
Modifiez ensuite le fichier playbook.yaml :
[trainee@centos8 roles]$ vi playbook.yaml [trainee@centos8 roles]$ cat playbook.yaml --- - hosts: all tasks: - name: message debug: msg="Conteneur - {{ inventory_hostname }} sous {{ansible_distribution}}"
Modifiez le fichier inventory :
[trainee@centos8 roles]$ cp inventory inventory.old [trainee@centos8 roles]$ vi inventory [trainee@centos8 roles]$ cat inventory postgresql ansible_connection=docker
Supprimez le fichier /home/trainee/.ansible/roles/group_vars/all.yaml :
[trainee@centos8 roles]$ rm -rf /home/trainee/.ansible/roles/group_vars/all.yaml
Exécutez la commande ansible-playbook en tant que root :
[root@centos8 roles]# ansible-playbook -i inventory playbook.yaml [DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.8 (default, Sep 10 2021, 09:13:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]. This feature will be removed from ansible-core in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. PLAY [all] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************* ok: [postgresql] TASK [message] *************************************************************************************************************************************************************************************************** ok: [postgresql] => { "msg": "Conteneur - postgresql sous CentOS" } PLAY RECAP ******************************************************************************************************************************************************************************************************* postgresql : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Copyright © 2022 Hugh Norris.