softasap.sa-container-bootstrap

sa-container-bootstrap

Estado de la Construcción Licencia: MIT Compatible con Ansible-Container Compatible con Packer.io

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

Acerca del proyecto

Experimental "base image" role for ansible-container based projects. Phusion base image inspired.

Instalar
ansible-galaxy install softasap.sa-container-bootstrap
Licencia
Unknown
Descargas
80
Propietario
Get your application deployed in a robust way