SSH デーモン用サービスの Docker 化

eg_sshd イメージの構築

以下の Dockerfile はコンテナ内に SSHd サービスをセットアップします。これは他のコンテナ用ボリュームの調査や、テスト用コンテナに対する迅速なアクセスを提供します。

# sshd## VERSION 0.0.2FROM 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 loginRUN 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 22CMD ["/usr/sbin/sshd", "-D"]

イメージを構築するには:

$ docker build -t eg_sshd .

test_sshd コンテナの実行

次は実行します。 dockerport を使い、コンテナのポート 22 がホスト側のどのポートに割り当て(マップ)されているか確認できます。

$ docker run -d -P --name test_sshd eg_sshd
$ docker port test_sshd 220.0.0.0:49154

それから、コンテナに 対して root として SSH できます。接続先は、 IP アドレス(これは dockerinspect で確認できます )か、Docker デーモンの IP アドレス( ipaddressifconfig で確認できます )上のポート 49154 か、Docker デーモンのホスト localhost です。

$ ssh root@192.168.1.2 -p 49154# パスワードは ``screencast`` です。$$

環境変数

sshd デーモンでシェルを呼び出すのは複雑です。シェルを起動する前に sshd 環境を調整し、 環境変数をユーザのシェルから通常のDocker のメカニズムに対して渡す必要があるためです。

値を設定するためには、 DockerfileENV を使います。先ほどの Dockerfile の例では、シェルの初期化のために /etc/profile を送る必要があるでしょう。

dockerrun-eENV=value で値を渡す必要がある場合は、同様の処理を行うスクリプトを準備する必要があります。そのためには sshd-DCMD 命令に置き換え、その準備したスクリプトを実行します。

クリーンアップ

最後に、テストの後でコンテナの停止と削除をし、そのイメージを削除します。

$ docker stop test_sshd
$ docker rm test_sshd
$ docker rmi eg_sshd