Qu'est-ce que Footloose? Footloose crée des conteneurs qui ressemblent à des machines virtuelles. Les conteneurs exécutent tous systemd en tant que PID 1 et incluent également un démon SSH qui vous permet de vous y connecter. Les conteneurs Footloose fonctionnent et se comportent comme une machine virtuelle. Il est même possible d'exécuter un démon Docker à l'intérieur d'eux.  La façon la plus simple de penser à Footloose est son équivalent Vagrant, mais avec des conteneurs à la place.

Vagrant est un outil qui a été créé il y a quelque temps par Hashicorp pour lancer des VM sur les ordinateurs portables des développeurs et créer des environnements sandbox pouvant être utilisés pour des tests ou d'autres projets expérimentaux. Footloose a des objectifs similaires, mais au lieu de lancer des machines virtuelles, il lance des conteneurs qui se comportent exactement comme des machines virtuelles. Une fois en cours d'exécution, ils peuvent être utilisés pour une variété de tâches; généralement, vous les utiliseriez comme n'importe quelle autre machine virtuelle, profitant de leurs temps de démarrage rapides; ou peut-être, vous devez lancer plusieurs machines virtuelles en même temps pour un projet de test intensif.

Lancement de Footloose

Une fois les fichiers binaires Footloose créés ou téléchargés pour votre système d'exploitation, l'exécution de la commande `footloose config create` crée un fichier YAML utilisé par toutes les commandes Footloose suivantes.

Ci-dessous, un fichier YAML typique créé par Footloose:

Démarrer le cluster :

MBP-de-admin:~ admin$ footloose config create --replicas 3
MBP-de-admin:~ admin$ footloose create
INFO[0000] Image: quay.io/footloose/centos7:0.5.0 present locally
INFO[0000] Creating machine: cluster-node0 ...
INFO[0001] Creating machine: cluster-node1 ...
INFO[0002] Creating machine: cluster-node2 ...

Se connecter en SSH dans une machine avec:

MBP-de-admin:~ admin$ footloose ssh root@node1
[root@node1 ~]# ps fx
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /sbin/init
   17 ?        Ss     0:00 /usr/lib/systemd/systemd-journald
   57 ?        Ss     0:00 /usr/sbin/sshd -D
   58 ?        Ss     0:00  \_ sshd: root@pts/1
   62 pts/1    Ss     0:00      \_ -bash
   75 pts/1    R+     0:00          \_ ps fx
   61 ?        Ss     0:00 /usr/lib/systemd/systemd-logind

Que pouvez-vous faire avec les VM?

Après avoir lancé une machine virtuelle de conteneur, SSH dessus et jetez un coup d'œil. Cela ressemble exactement à une machine virtuelle, avec un système init, ainsi que systemd. Et comme c'est identique une machine virtuelle ordinaire, vous pouvez installer tous les autres packages dont vous avez besoin.  

Les principales utilisations de Footloose sont:  

  • Exécution d'un système d'exploitation différent sur votre machine locale - Par exemple, dans la démo, l'ordinateur portable exécute MacOSX, mais les VM de conteneur exécutent CentOS. Vous pouvez créer des images de base personnalisées à utiliser dans vos machines virtuelles de conteneur. De cette façon, vous pouvez exécuter un certain nombre de tests simultanés sur différents OS.
  • Exécuter Docker à l'intérieur des VM - Vous pouvez également exécuter `dockerd` à l'intérieur des VM. Avec Dockerd exécuté sur vos machines virtuelles, un cluster Kubernetes peut être installé en plus de cela. La raison principale pour laquelle a été créé footloose était de pouvoir tester le programme d'installation de Kubernetes, kubeadm, sur un certain nombre de systèmes d'exploitation différents dans Kubernetes en une seule fois.
  • Exécuter Apache - Créez une image de base avec Apache inclus et qui expose un port ouvert comme 80 ou 443.
  • Provisionner des machines avec Ansible - installez ansible sur les VM et exécutez-le à partir de là pour provisionner des machines supplémentaires.
  • Résolution et isolation DNS - Avec un réseau défini par l'utilisateur qui permet la résolution de noms DNS des noms de conteneurs, vous pouvez parler à chaque conteneur du cluster avec uniquement le nom d'hôte.

De nombreux autres exemples peuvent être trouvés dans les documents Footloose.  

Docker

Si je dis :

$ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS                   NAMES
ec948ead66f9        quay.io/footloose/centos7:0.5.0   "/sbin/init"        23 hours ago        Up 23 hours         0.0.0.0:32773->22/tcp   cluster-node2
834295e972df        quay.io/footloose/centos7:0.5.0   "/sbin/init"        23 hours ago        Up 23 hours         0.0.0.0:32772->22/tcp   cluster-node1
572773c2dee2        quay.io/footloose/centos7:0.5.0   "/sbin/init"        23 hours ago        Up 23 hours         0.0.0.0:32771->22/tcp   cluster-node0

Les noms des conteneurs sont dérivés de cluster.name et cluster.machine Name.  Ils exécutent systemd en tant que PID 1, il est même possible d'inspecter les logs de démarrage:

docker logs cluster-node1
systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization docker.
Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!

Set hostname to <node1>.
Initializing machine ID from random generator.
[  OK  ] Reached target Local File Systems.
[  OK  ] Reached target Paths.
[  OK  ] Created slice Root Slice.
[  OK  ] Listening on Journal Socket.
[  OK  ] Created slice System Slice.
         Starting Create Volatile Files and Directories...
[  OK  ] Listening on Delayed Shutdown Socket.
[  OK  ] Reached target Slices.
[  OK  ] Reached target Swap.
         Starting Journal Service...
[  OK  ] Started Create Volatile Files and Directories.
[  OK  ] Started Journal Service.
[  OK  ] Reached target System Initialization.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Timers.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting OpenSSH Server Key Generation...
         Starting Cleanup of Temporary Directories...
[  OK  ] Started Cleanup of Temporary Directories.
[  OK  ] Started OpenSSH Server Key Generation.
         Starting OpenSSH server daemon...
[  OK  ] Started OpenSSH server daemon.
[  OK  ] Reached target Multi-User System.

Cas concret - VM Ubuntu et déploiement d'Apache via Docker

Choisir l'image du système d'exploitation à exécuter

Footloose utilisera par défaut une image de conteneur centos 7. L'argument --image de config create peut être utilisé pour configurer l'image du système d'exploitation. Les images de système d'exploitation valides sont:  

  • quay.io/footloose/centos7
  • quay.io/footloose/fedora29
  • quay.io/footloose/ubuntu16.04
  • quay.io/footloose/ubuntu18.04
  • quay.io/footloose/amazonlinux2
  • quay.io/footloose/debian10
  • quay.io/footloose/clearlinux

Par exemple:  

footloose config create --replicas 3 --image quay.io/footloose/fedora29 

Les images Ubuntu nécessitent le flag --privileged:  

footloose config create --replicas 1 --image quay.io/footloose/ubuntu16.04 --privileged

C'est parti sur mon Mac :

footloose config create --replicas 2 --image quay.io/footloose/ubuntu16.04 --privileged

Ce qui donne aprés création :

$ footloose create
INFO[0000] Pulling image: quay.io/footloose/ubuntu16.04 ...
INFO[0058] Creating machine: cluster-node0 ...
INFO[0060] Creating machine: cluster-node1 ...

On se logue en ssh dans la VM que l'on veut :

$ footloose ssh root@node1
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.19.76-linuxkit x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@node1:~#

Coucou Ubuntu. Ok, ça c'était simplement pour voir comment déployer une VM Footloose avec une autre image que Centos.

Maintenant Apache, on commence par delete les actuels VM's.

footloose delete

On crée un dossier :

mkdir /my_build

puis on s'y place :

 cd ~/my_build

On crée un Dockerfile sur votre Mac avec :

sudo nano Dockerfile

On remplit le fichier docker avec ceci :

FROM quay.io/footloose/ubuntu18.04

RUN apt-get update && apt-get install -y apache2
COPY index.html /var/www/html

RUN systemctl enable apache2.service

EXPOSE 80

On ajoute le fichier suivant (index.html) dans le repertoire :

<!DOCTYPE html>
<html>
    <title>Footloose</title>
    <body>
        Hello, from footloose!
    </body>
</html>

Puis on build l'image avec Docker :

$ docker built -t apache:test01 .

Ce qui donne :

Sending build context to Docker daemon  9.728kB
Step 1/5 : FROM quay.io/footloose/ubuntu18.04
 ---> 9881f0ad65ef
Step 2/5 : RUN apt-get update && apt-get install -y apache2
 ---> Using cache
 ---> 8d852237a1b0
Step 3/5 : COPY index.html /var/www/html
 ---> 6d7ce0293a47
Step 4/5 : RUN systemctl enable apache2.service
 ---> Running in 275e660bb91f
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2
Removing intermediate container 275e660bb91f
 ---> 072431f0624b
Step 5/5 : EXPOSE 80
 ---> Running in ee2c0a669ea0
Removing intermediate container ee2c0a669ea0
 ---> f2d0505c36ff
Successfully built f2d0505c36ff
Successfully tagged apache:test01

Créez un fichier de configuration footloose :

$ footloose config create --image apache:test01

Maintenant, créez une machine!

$ footloose create

Une fois que la machine est prête, vous devriez pouvoir accéder à Apache sur le port exposé.

$ docker port cluster-node0 80
0.0.0.0:32784
$ curl 0.0.0.0:32784
<!DOCTYPE html>
<html>
    <title>Footloose</title>
    <body>
        Hello, from footloose!
    </body>
</html>

Have fun !