softasap.sa-container-bootstrap
sa-container-bootstrap
このヘルパーロールは、ansible-container
や Hashicorp packer
と連携して、ゲストOSを事前に設定し、より良いイメージを作成することを目指しています。
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イメージのベースとして使用されるほぼ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
起動時にプロセスを実行する
container_init_directory
(デフォルトは/etc/my_init.d
)にshファイルを配置することで、それらが起動時に実行されることを保証します。
runitのインストールをスキップすることにした場合、ブート時に何かを実行する唯一の方法です。
コンテナ内での環境設定の追加方法
外部から環境を渡すだけでなく、環境ファイルを/etc/container_environment
ディレクトリに置くこともできます。以下の規則に従います:ファイル名は設定したい変数の名前で、内容は設定したい変数の値です。
コンテナの初期化の具体的な詳細
前述のように、このロールは3つの初期化オプションをサポートしています: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でディスカッションチャンネルに参加してください。
他のロールを 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