softasap.sa-container-bootstrap
sa-container-bootstrap
Rol de ayuda que se ejecuta con ansible-container
o packer
de Hashicorp, con el objetivo de preconfigurar el sistema operativo invitado para mejorar la imagen. La parte de Ubuntu se basa en la idea de Phusion BaseImage. Consulta la licencia original.
Ideas y bibliotecas de terceros utilizadas:
Distribución | IMAGEN 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
La función se puede configurar utilizando los siguientes parámetros
# CONFIGURACIÓN GENERAL
# Sistema de inicio deseado: compatible con imagen docker de phusion, usando dumb-init
container_init: "phusion-init" # "dumb-init" "tini-init"
container_svc: "runit" # "supervisord"
# Directorio donde puedes colocar archivos ejecutables para que se ejecuten al inicio
container_init_directory: /etc/my_init.d
# Instalar cron dentro del contenedor (usando el iniciador de servicio runit)
option_container_cron: true
# Instalar servicio ssh dentro del contenedor (usando el iniciador de servicio runit)
option_container_sshd: true
#... y habilitar el inicio del servicio
option_container_sshd_enabled: true
#... usando este par de claves para conectarse dentro de la instancia:
container_ssh_private_key: "{{role_dir}}/files/keys/insecure_key"
container_ssh_public_key: "{{role_dir}}/files/keys/insecure_key.pub"
# Instalar servicio syslog dentro del contenedor y redirigir la salida a los registros de docker (usando el iniciador de servicio runit)
option_container_syslog_ng: true
# Configuración relacionada con phusion-init
# utilizada por phusion-init, debe apuntar al python instalado real
container_python_interpeter: "/usr/bin/python3"
# Configuración relacionada con dumb-init
dumb_init_version: "1.2.0"
Más información sobre los servicios
El contenedor utiliza runit http://smarden.org/runit/, que actúa de manera similar al clásico upstart. Apunta al casi 100% de sistemas que se suelen usar como base para imágenes de docker.
Algunos ejemplos para iniciar servicios con runit: colocar archivos ejecutables .runit en /etc/service/NOMBRE_DEL_SERVICIO/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
Ejecutar procesos al inicio
Colocar archivos sh en container_init_directory
(por defecto /etc/my_init.d
) asegurará que se ejecuten al iniciar. Si decides omitir la instalación de runit, esta es la única forma de ejecutar algo al arranque.
Formas adicionales de establecer el entorno dentro del contenedor
Además de pasar el entorno externamente, puedes poner archivos de entorno en el directorio /etc/container_environment
, utilizando la siguiente convención: el archivo se nombra con el nombre de la variable que deseas establecer, como ENVVARNAME y su contenido es el valor de la variable que deseas establecer.
Especificaciones de inicio del contenedor
Como se mencionó, el rol admite tres opciones de inicialización: phusion-init
, dumb-init
, supervisor-init
. Mientras que phusion-init
proporciona el mismo enfoque que vemos en la imagen de docker de Phusion, dumb-init
y supervisor-init
pueden usarse en servicios más sencillos.
dumb-init
utiliza un sistema de inicio más simple: https://github.com/Yelp/dumb-init
supervisor-init
es un sistema de inicio conocido, pero más pesado, a menudo usado con proyectos de python.
Código en acción
Consulta el ejemplo de caja para un ejemplo práctico que funciona. Configurará la imagen de la aplicación que mostrará 'OK' al conectarse. Échale un vistazo:
Más consejos temporales sobre la resolución de problemas de ansible container, si los hay, aquí: https://gist.github.com/Voronenko/77fc4743ef7e70d74ee74b7ee62fd7e5 ()
Derechos de autor y licencia
El código tiene doble licencia bajo la Licencia BSD de 3 cláusulas y la Licencia MIT. Elige la que mejor te convenga.
Contáctanos:
Suscríbete para recibir actualizaciones de roles en FB
Únete al canal de discusión en gitter en Gitter
Descubre otros roles en http://www.softasap.com/roles/registry_generated.html
Visita nuestro blog en 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