sshログイン出来るdockerコンテナを作る

1. はじめに

CentOSで日本語ロケール設定にするDockerfile の続きというわけでもありませんが、コンテナにssh接続出来るように Dockerfile に追記してみる。

  • Windows10

  • Docker Toolbox

を使用している場合の方法です。

2. Dockerfile

Dockerfile
 1# base image
 2FROM centos:7
 3
 4# system update
 5RUN yum -y update && yum clean all
 6RUN yum reinstall -y glibc-common && yum clean all
 7
 8# locale
 9# glibcの更新より後方に記述すること
10# カスタムロケールが消えてしまう
11RUN localedef -c -i ja_JP -f UTF-8 ja_JP.UTF-8
12# glibcの更新でカスタムロケールが消されないために ja_JP.utf8 を追加
13# override_install_langs=en_US.utf8
14# ↓
15# override_install_langs=en_US.utf8,ja_JP.utf8
16RUN sed -i -e '/override_install_langs/s/$/,ja_JP.utf8/g' /etc/yum.conf
17
18ENV LANG ja_JP.UTF-8
19
20# timezone
21RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
22
23RUN yum install -y openssh-server
24RUN /usr/sbin/sshd-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key
25
26RUN yum clean all
27
28# rootでログイン出来るようにする
29RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
30
31# root のパスワード設定
32RUN echo 'root:passwordxxxx' | chpasswd
33
34# ポート22解放
35EXPOSE 22
36
37CMD \["/usr/sbin/sshd", "-D"\]

3. イメージビルド

$ cd <Dockerfileがあるディレクトリ>
$ docker build -t <tagname> .
$ cd /path/to/docker/centos_ssh
$ docker build -t centos7/ssh .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7/ssh         latest              a46fa67820c5        About an hour ago   359MB
 :
 :

4. コンテナ起動

$ docker run -it -d -p <hostport>:22 -h <hostname> --name <containername> --rm <tagname>
-p <hostport>:2222Dockerfile で解放している(EXPOSEしている)ポート
$ docker run -it -d -p 10022:22 -h dev --name dev --rm centos7/ssh

5. ホストへのログイン

Docker Toolbox を使用しているのでホストは VirtualBox で動いている。sshするにはホストのIPアドレスが必要になる。

$ docker-machine ip default
192.168.99.100 # 出力例

Docker Quicksart Terminal を起動するときにも表示されている。

d387f7f7

sshで接続

$ ssh -p 10022 root@192.168.99.100
上記のコンテナ起動で指定したホストのポートを 10022 を使用する

puttyでの接続

2fe8ae1c