softasap.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服务,并将输出重定向到docker日志(使用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类似。它几乎可以涵盖所有通常用作docker镜像基础的系统。
使用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
在启动时运行进程
在 container_init_directory
中放置sh文件(默认为 /etc/my_init.d
)将确保它们在启动时执行。
如果您决定跳过安装runit,这是唯一在启动时执行某些操作的方法。
在容器内部设置环境的其他方法
除了外部传递环境,您还可以将环境文件放置在 /etc/container_environment
目录中,使用以下约定:文件名为您要设置的变量名,如 ENVVARNAME,文件内容是您要设置的变量值。
容器初始化细节
如前所述,该角色支持三种初始化选项: phusion-init
、dumb-init
、supervisor-init
。
虽然 phusion-init
提供了与我们在Phusion docker映像中看到的相同的方法,但 dumb-init
和 supervisor-init
可以用于更简单的服务。
dumb-init
使用更简单的初始化系统:https://github.com/Yelp/dumb-init
supervisor-init
是一个更重的初始化系统,通常用于python项目。
代码示例
请查看box-example以获取独立的工作示例。它将配置一个应用程序映像,该映像在连接时显示“OK” - 快来看看:
有关ansible容器故障排除的更多临时提示,如果有,访问 https://gist.github.com/Voronenko/77fc4743ef7e70d74ee74b7ee62fd7e5。
版权和许可证
代码以双重许可证方式发布,适用于 BSD 3条款 和 MIT许可证。选择最适合您的许可证。
联系我们:
在FB上订阅角色更新。
加入Gitter讨论频道,访问 Gitter。
在 http://www.softasap.com/roles/registry_generated.html 发现其他角色。
访问我们的博客,链接为 http://www.softasap.com/blog/archive.html。