sa-container-bootstrap
sa-container-bootstrap
Это вспомогательная роль, которая выполняется с помощью ansible-container
или Hashicorp packer
, чтобы предварительно настроить гостевую операционную систему для лучшего образа. Часть для Ubuntu основана на идее Phusion BaseImage. См. оригинальную лицензию.
Используемые сторонние идеи и библиотеки:
Дистрибуция | ОС БАЗА | +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: |
Переменные
Роль можно настроить, используя следующие параметры:
# ОБЩАЯ КОНФИГУРАЦИЯ
# Желаемая система инициализации: совместимая с образом phusion docker, использующая dumb-init
container_init: "phusion-init" # "dumb-init" "tini-init"
container_svc: "runit" # "supervisord"
# Каталог, куда можно помещать исполняемые файлы для выполнения при запуске
container_init_directory: /etc/my_init.d
# Установить cron внутри контейнера (используя сервис runit)
option_container_cron: true
# Установить ssh сервис внутри контейнера (используя сервис runit)
option_container_sshd: true
#... и включить автозапуск сервиса
option_container_sshd_enabled: true
#... используя этот ключ для подключения внутри экземпляра:
container_ssh_private_key: "{{role_dir}}/files/keys/insecure_key"
container_ssh_public_key: "{{role_dir}}/files/keys/insecure_key.pub"
# Установить сервис syslog внутри контейнера и перенаправить вывод в логи докера (используя сервис runit)
option_container_syslog_ng: true
# Конфигурация, связанная с phusion-init
# используется phusion-init, должен указывать на реально установленный python
container_python_interpeter: "/usr/bin/python3"
# Конфигурация, связанная с dumb-init
dumb_init_version: "1.2.0"
Информация о сервисах
Контейнер использует runit http://smarden.org/runit/, который работает аналогично классическому upstart. Он нацелен почти на 100% систем, которые обычно используются в качестве базы для образов докера.
Некоторые примеры запуска сервисов с помощью runit: разместите исполняемые .runit файлы в /etc/service/SERVICE_NAME/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
Запуск процессов при старте
Помещая sh файлы в container_init_directory
(по умолчанию /etc/my_init.d
), вы гарантируете их выполнение при старте.
Если вы решите пропустить установку runit, это единственный способ запустить что-то при загрузке.
Дополнительные способы настройки окружения внутри контейнера
Кроме того, что вы можете передавать переменные окружения извне, вы можете помещать файлы окружения в директорию /etc/container_environment
, используя следующее правило: файл называется именем переменной, которую вы хотите установить, например ENVVARNAME, и его содержимое - это значение переменной, которую вы хотите установить.
Особенности инициализации контейнера
Как уже упоминалось, роль поддерживает три варианта инициализации: phusion-init
, dumb-init
, supervisor-init
.
Хотя phusion-init
предоставляет тот же подход, что и на образе Phusion, dumb-init
и supervisor-init
могут использоваться в более простых сервисах.
dumb-init
использует более простую систему инициализации: https://github.com/Yelp/dumb-init
supervisor-init
известна, но она более тяжелая система инициализации, часто используемая с проектами на Python.
Код в действии
Смотрите пример box-example для самостоятельной работающей версии. Она настроит образ приложения, который будет отображать 'OK' при подключении - проверьте это:
Больше временных подсказок для устранения неполадок в ansible container (если есть) на https://gist.github.com/Voronenko/77fc4743ef7e70d74ee74b7ee62fd7e5 ()
Авторское право и лицензия
Код имеет две лицензии: BSD с 3-ми пунктами и MIT. Выберите ту, которая больше подходит вам.
Контакты:
Подписывайтесь на обновления ролей на [FB] (https://www.facebook.com/SoftAsap/)
Присоединяйтесь к каналу обсуждений gitter на Gitter
Откройте для себя другие роли на http://www.softasap.com/roles/registry_generated.html
Посетите наш блог на 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