ansiblerになりたい、、!!
ansibleというよりdockerの記事です。ご容赦ください。
きっかけ
巷にあふれているansibleに関する文献は、大抵Vagrantを使って仮想マシンを立てている。
しかし、Vagrantはとっても重い。
マシンの作成にも、起動にもとっても時間がかかる。
そんな時こそdockerだ。dockerを使うのだ。
と思ったがそういえばdockerってssh接続できるのだろうか。。
こういった思い立ちから、sshdが動作するDockerコンテナを作成することになるのでした。
Dockerコンテナにsshできるようにすることについては賛否両論あるが、 今回はansibleのテスト用にコンテナを作成するのみなので、問題ナッシング。
Dockefileの用意
rootユーザーでのsshdコンテナに関しては公式(以下)に書いてあったので参考にどうぞ。 Dockerize an SSH service | Docker Documentation
今回はrootユーザー以外で行いたかったのである程度変更を加えています。
Dockerfileは以下のようになっています。
sshdを起動してstart.sh
を走らせるだけのシンプル構成。
FROM centos:centos7 MAINTAINER The CentOS Project <cloud-ops@centos.org> RUN yum -y update; yum clean all RUN yum -y install openssh-server passwd; yum clean all ADD ./start.sh /start.sh RUN mkdir /var/run/sshd RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' RUN chmod 755 /start.sh # EXPOSE 22 RUN ./start.sh ENTRYPOINT ["/usr/sbin/sshd", "-D"]
start.sh
は以下のようになっています。
このスクリプトでは、user
というユーザーを作成し、パスワードをnewpass
に設定しています。
#!/bin/bash __create_user() { # Create a user to SSH into as. useradd user SSH_USERPASS=newpass echo -e "$SSH_USERPASS\n$SSH_USERPASS" | (passwd --stdin user) echo ssh user password: $SSH_USERPASS } # Call all functions __create_user
dockerイメージの作成
Dockerfileからdockerイメージを作成します。
-t
でタグ名kimoton/ssh:centos7
を指定します。
--rm
をつけておけばdockerのプロセスが死んだときにイメージも一緒に消えてくれます。
docker build --rm -t kimoton/ssh:centos7 .
dockerコンテナの作成
dockerコンテナを作成し、起動します。
-d
オプションを付けることでコンテナをバックグラウンドで実行しています。
-p
オプションにより、ポート22番のポートフォワーディングを行います。
docker run -d -p 22 kimoton/ssh:centos7
ssh接続の確認
起動しているdockerプロセスを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15c9cbab8acb kimoton/ssh:centos7 "/usr/sbin/sshd -D" 9 minutes ago Up 9 minutes 0.0.0.0:32777->22/tcp condescending_pare
port 32777番に転送されていることがわかります。
それでは、ssh接続できることを確認しましょう。
ssh -p 32777 user@localhost #Last login: Fri Aug 24 04:07:55 2018 from gateway #-bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8) #/bin/sh: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8) #[user@15c9cbab8acb ~]$
無事sshログインできました!うれしい!
参考
ssh以外でもansibleの接続に使えるらしい。。