リモートサーバーにssh接続をして作業をするという機会は多いと思います。
Dockerとssh接続できるようになれば、仮想のリモートサーバーとして扱えるためssh接続を利用したテストをローカルで行うことができます。
今回、『一般ユーザーでssh接続できるDocker環境』を作成するDockerファイルを用意したのでその共有をしたいと思います。
公開されている『ssh接続できるDocker環境』を作成するDockerファイル
こちらでssh接続できるDockerファイルが共有されているのでこれを利用します。
FROM ubuntu:16.04
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 prohibit-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
# For executing shellscript
RUN apt-get install -y git less vim sudo
RUN useradd -m isucon
RUN echo 'isucon:isucon' | chpasswd
RUN usermod -aG sudo isucon
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
オリジナルのDockerファイルに一般ユーザーを作成する手順を追加します。
今回はisuconというsudo権限をもつ一般ユーザーを作成しています。
FROM ubuntu:16.04
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 prohibit-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
+ # Create User
+ RUN apt-get install -y git less vim sudo
+ RUN useradd -m isucon
+ RUN echo 'isucon:isucon' | chpasswd
+ RUN usermod -aG sudo isucon
+ RUN chsh -s /bin/bash isucon
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Dockerファイルをビルドして環境を構築する
作成したDockerファイルをビルドしてDockerイメージを作成します。
ここではssh_script_sandboxというイメージ名のDockerイメージを作成しています。
$ docker build -t ssh_script_sandbox .
作成されたssh_script_sandboxというDockerイメージを利用してDockerコンテナを起動します。
ここではssh_script_containerという名前のコンテナをバックグラウンドで実行しています。
なお、ホストの20022番ポートとDockerコンテナの22番ポート(sshで利用されるポート番号)をポートフォワードしています。
$ docker run -d -p 20022:22 --name ssh_script_container ssh_script_sandbox
localhostの20022に対してssh接続することでDockerコンテナにログインできるようになります。
$ ssh isucon@localhost -p 20022
今回の詳細はDockerファイルの使い方は?具体例で学ぶ、他人が作った環境を共有する方法でも解説をしているので、興味のある方はご覧になってください。
by @nishina555