SSH デーモン用サービスの Docker 化¶
eg_sshd
イメージの構築¶
以下の Dockerfile
はコンテナ内に SSHd サービスをセットアップします。これは他のコンテナ用ボリュームの調査や、テスト用コンテナに対する迅速なアクセスを提供します。
# sshd
#
# VERSION 0.0.2
FROM ubuntu:14.04
MAINTAINER Sven Dowideit <SvenDowideit@docker.com>
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
イメージを構築するには:
$ docker build -t eg_sshd .
test_sshd
コンテナの実行¶
次は実行します。 docker port
を使い、コンテナのポート 22 がホスト側のどのポートに割り当て(マップ)されているか確認できます。
$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 22
0.0.0.0:49154
それから、コンテナに 対して root
として SSH できます。接続先は、 IP アドレス(これは docker inspect
で確認できます )か、Docker デーモンの IP アドレス( ip address
や ifconfig
で確認できます )上のポート 49154``か、Docker デーモンのホスト ``localhost
です。
$ ssh root@192.168.1.2 -p 49154
# パスワードは ``screencast`` です。
$$
環境変数¶
sshd
デーモンでシェルを呼び出すのは複雑です。シェルを起動する前に sshd
環境を調整し、 環境変数をユーザのシェルから通常のDocker のメカニズムに対して渡す必要があるためです。
値を設定するためには、 Dockerfile
で ENV
を使います。先ほどの Dockerfile
の例では、シェルの初期化のために /etc/profile
を送る必要があるでしょう。
docker run -e ENV=value
値を渡す必要がある場合は、同様の処理を行うスクリプトを準備する必要があります。そのためには sshd -D
を CMD
命令に置き換え、その準備したスクリプトを実行します。
クリーンアップ¶
最後に、テストの後でコンテナの停止と削除をおこない、そのイメージを削除します。
$ docker stop test_sshd
$ docker rm test_sshd
$ docker rmi eg_sshd
参考
- Dockerizing an SSH daemon service
- https://docs.docker.com/engine/examples/running_ssh_service/