例によって自分用のメモだからどこかおかしいかも
前提
jenkinsで定期的にコンテナの動作状況を確認して、停止してるコンテナがあったら自動で再起動して欲しい。
->でもホスト環境にドカドカインストールしてたら面白くない。
->監視するコンテナを作ってそこにjenkins入れてホストにコマンド飛ばせばいいんじゃね
ってことでまずはコンテナからホストにsshで接続してnginx入れてるコンテナ立ち上げるコンテナを作ってみた。
FROM base/archlinux RUN pacman -Syy --noconfirm RUN pacman -S --noconfirm archlinux-keyring RUN pacman -Syu --noconfirm RUN pacman-db-upgrade RUN pacman -S --noconfirm openssh ADD id_rsa / EXPOSE 80 CMD ssh -t -t -o 'StrictHostKeyChecking no' ${HOST_IP} -i /id_rsa docker run -i -t -d -p 80:80 mattyan/nginx
EXPORSEは今は必要なかったな…
事前にホストでsshのキーを作って公開鍵を登録。秘密鍵をADDでコンテナに。
これをmattyan/docadminの名前でビルド。
ホストのIPはコンテナからはわからないみたいだからコンテナ実行時に環境変数を使って渡してあげる。(参考: Dockerコンテナ内部からホストのSMTPを利用したい)
[bash]
docker run -e "HOST_IP=`ip r | grep ‘docker0’ | awk ‘{print $9}’`" mattyan/docadmin
[/bash]
普通にSSHを実行しても
Pseudo-terminal will not be allocated because stdin is not a terminal.
と
Host key verification failed.
が出てきて接続できなかったのでググッた結果。
Pseudo-は仮想ターミナルを強制的に割り当てるために-tオプションを2個設定。
Host key-は-o ‘StrictHostKeyChecking no’を設定してホストのキーチェックを無視するように設定。
で黙った。(セキュリティ的にはまずそうだけど。特に後者)
これでmattyan/docadminを走らせたらmattyan/nginxを立ち上げて自動的に死ぬコンテナができた。あとは生存監視とjenkinsのインストールだ。