開発環境
macOS Sierra
docker for mac Version 17.06.1-ce-mac24 (18950)
完成目標
slaveコンテナからmasterコンテナにssh接続でログインする
Dockerfileの準備
FROM centos:7
# yum update
RUN yum -y update && yum clean all
# ssh install
RUN yum -y install openssh-server openssh-client && \
mkdir ~/.ssh && \
touch ~/.ssh/authorized_keys && \
chmod 600 ~/.ssh/authorized_keys
イメージの作成
Dockerfileを置いてあるところでビルドを実行
$ docker build -t hello_centos:latest .
コンテナの作成(master)
$ docker run --privileged -d -it --name master -p 8080:80 -p 2222:22 hello_centos /sbin/init
コンテナの作成(slave)
$ docker run --privileged -d -it --name slave -p 8090:80 -p 2223:22 --link master:mas hello_centos /sbin/init
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94f5c8b21eb0 hello_centos "/sbin/init" 7 seconds ago Up 6 seconds 0.0.0.0:2223->22/tcp, 0.0.0.0:8090->80/tcp slave
8d23ba5bd5d1 hello_centos "/sbin/init" 23 seconds ago Up 21 seconds 0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp master
$ docker inspect [コンテナ名] でコンテナの情報を取得できる
$ docker inspect slave
$ docker exec -it slave bash
[root@94f5c8b21eb0 /]# set | grep MAS
MAS_ENV_no_proxy='*.local, 169.254/16'
MAS_NAME=/slave/mas
MAS_PORT=tcp://172.17.0.2:22
MAS_PORT_22_TCP=tcp://172.17.0.2:22
MAS_PORT_22_TCP_ADDR=172.17.0.2
MAS_PORT_22_TCP_PORT=22
MAS_PORT_22_TCP_PROTO=tcp
MAS_PORT_80_TCP=tcp://172.17.0.2:80
MAS_PORT_80_TCP_ADDR=172.17.0.2
MAS_PORT_80_TCP_PORT=80
MAS_PORT_80_TCP_PROTO=tcp
$ ping mas
PING mas (172.17.0.2) 56(84) bytes of data.
64 bytes from mas (172.17.0.2): icmp_seq=1 ttl=64 time=0.205 ms
64 bytes from mas (172.17.0.2): icmp_seq=2 ttl=64 time=0.154 ms
ssh-keygenで鍵作成を作成する
[root@94f5c8b21eb0 ~]# cd ~/.ssh
[root@94f5c8b21eb0 .ssh]# ssh-keygen -t rsa
configの設定
[root@94f5c8b21eb0 .ssh]# vi ~/.ssh/config
Host master
HostName 172.17.0.2
User root
Port 2222
IdentityFile ~/.ssh/id_rsa
slaveコンテナの準備完了
masterコンテナに公開鍵を設定
slaveコンテナで作成した公開鍵(id_rsa.pubの中をコピーしておく)をmasterコンテナのauthorized_keysファイルに貼り付ける
$ docker exec -it master bash
[root@8d23ba5bd5d1]# vi ~/.ssh/authorized_keys
slaveコンテナで作成した公開鍵(id_rsa.pub)の中をコピーして貼り付ける
slaveコンテナからsshログインしてみる
[root@94f5c8b21eb0]# ssh master
ssh: connect to host 172.17.0.2 port 2222: Connection refused
ログインできない
masterコンテナのssh専用のportが22(デフォルト)になっているので2222に変更してあげる
masterコンテナのsshd_configのport番号を指定
[root@8d23ba5bd5d1]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
[root@8d23ba5bd5d1]# vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 2222 ← ここ
sshd -t
エラーが出なければOK
sshdの再起動
systemctl restart sshd.service
これでsshの設定が終わりです。再度、slaveコンテナからmasterコンテナにsshログインできるか試してみましょう
[root@94f5c8b21eb0]# ssh master
The authenticity of host '[172.17.0.2]:2222 ([172.17.0.2]:2222)' can't be established.
ECDSA key fingerprint is 5c:8c:f9:29:cd:5f:0a:1f:08:ab:c6:db:b1:c0:47:0e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[172.17.0.2]:2222' (ECDSA) to the list of known hosts.
[root@8d23ba5bd5d1 ~]#
できました。
参考
DockerをMacにインストールする (更新:2017/5/26)
CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する
MacにDocker - Docker Compose
SSHのポート番号を変更 - SSHサーバーの設定