softasap.sa-container-bootstrap
sa-container-bootstrap
Ce rôle d'assistance doit être exécuté avec ansible-container
ou packer
de Hashicorp, visant à préconfigurer le système d'exploitation invité pour une meilleure image. La partie Ubuntu est basée sur l'idée de Phusion BaseImage. Voir la licence originale.
Idées et bibliothèques tierces utilisées :
Distribution | IMAGE DE BASE | +SSHD | +CRON | + Syslog ng |
---|---|---|---|---|
Alpine 3.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
Alpine 3.5 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
Alpine 3.6 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
Alpine 3.7 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
debian-jessie | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
debian-stretch | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
ubuntu-xenial | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Variables
Le rôle peut être configuré à l'aide des paramètres suivants :
# CONFIGURATION GÉNÉRALE
# Système d'initialisation souhaité : compatible avec les images docker phusion, utilisant dumb-init
container_init: "phusion-init" # "dumb-init" "tini-init"
container_svc: "runit" # "supervisord"
# Répertoire où vous pouvez mettre des fichiers exécutables à exécuter au démarrage
container_init_directory: /etc/my_init.d
# Installer cron à l'intérieur du conteneur (utilisant le service runit)
option_container_cron: true
# Installer le service ssh à l'intérieur du conteneur (utilisant le service runit)
option_container_sshd: true
#... et activer le démarrage du service
option_container_sshd_enabled: true
#... en utilisant cette paire de clés pour se connecter à l'intérieur de l'instance :
container_ssh_private_key: "{{role_dir}}/files/keys/insecure_key"
container_ssh_public_key: "{{role_dir}}/files/keys/insecure_key.pub"
# Installer le service syslog à l'intérieur du conteneur et rediriger la sortie vers les logs docker (utilisant le service runit)
option_container_syslog_ng: true
# Configuration liée à phusion-init
# utilisée par phusion-init, doit pointer sur le python installé
container_python_interpeter: "/usr/bin/python3"
# Configuration liée à dumb-init
dumb_init_version: "1.2.0"
Plus d'informations sur les services
Le conteneur utilise runit http://smarden.org/runit/, qui agit de manière similaire à l'upstart classique. Il cible presque 100 % des systèmes habituellement utilisés comme base pour les images docker.
Quelques exemples de démarrage de services avec runit : placez des fichiers exécutables .runit sous /etc/service/NOM_DU_SERVICE/run
#!/bin/sh
set -e
. /etc/memcached.conf
exec chpst -u memcache /usr/bin/memcached $MEMCACHED_OPTS >>/var/log/memcached.log 2>&1
#!/bin/bash
set -e
exec nginx -c /etc/nginx/nginx.conf
#!/bin/sh
set -e
RUNDIR=/var/run/redis
PIDFILE=$RUNDIR/redis.pid
mkdir -p $RUNDIR
touch $PIDFILE
chown redis:redis $RUNDIR $PIDFILE
chmod 755 $RUNDIR
exec chpst -u redis /usr/bin/redis-server /etc/redis/redis.conf
Exécution des processus au démarrage
Placer des fichiers sh dans container_init_directory
(par défaut /etc/my_init.d
) garantira qu'ils seront exécutés au démarrage. Si vous décidez de ne pas installer le runit, c'est la seule façon pour que quelque chose soit exécuté au démarrage.
Autres moyens de définir l'environnement à l'intérieur du conteneur
En plus de passer des variables d'environnement de façon externe, vous pouvez placer des fichiers d'environnement dans le répertoire /etc/container_environment
, en utilisant la convention suivante : le fichier est nommé d'après le nom de la variable que vous souhaitez définir, comme ENVVARNAME et son contenu est la valeur de la variable que vous souhaitez définir.
Spécificités de l'initialisation du conteneur
Comme mentionné, ce rôle prend en charge trois options d'initialisation : phusion-init
, dumb-init
, supervisor-init
. Alors que phusion-init
fournit la même approche que celle que nous voyons sur l'image docker de Phusion, dumb-init
et supervisor-init
peuvent être utilisés dans des services plus simples.
dumb-init
utilise un système d'initialisation plus simple : https://github.com/Yelp/dumb-init
supervisor-init
est un système d'initialisation connu, mais plus lourd, souvent utilisé avec des projets Python.
Code en action
Voir box-example pour un exemple fonctionnel autonome. Cela configurera une image d'application qui affichera 'OK' lors de la connexion - jetez un œil :
Plus d'astuces temporaires sur le dépannage d'ansible container, le cas échéant, sur https://gist.github.com/Voronenko/77fc4743ef7e70d74ee74b7ee62fd7e5 ()
Droits d'auteur et licence
Le code est sous licence double, soit [BSD 3 clauses] (https://opensource.org/licenses/BSD-3-Clause) soit [Licence MIT] (http://opensource.org/licenses/MIT). Choisissez celle qui vous convient le mieux.
Contactez-nous :
Abonnez-vous aux mises à jour des rôles sur [FB] (https://www.facebook.com/SoftAsap/)
Rejoignez le canal de discussion Gitter à Gitter
Découvrez d'autres rôles sur http://www.softasap.com/roles/registry_generated.html
Visitez notre blog à http://www.softasap.com/blog/archive.html
Experimental "base image" role for ansible-container based projects. Phusion base image inspired.
ansible-galaxy install softasap.sa-container-bootstrap