パラボラアンテナと星の日記

あることないこと

今さらだけどboot2dockerで作ったコンテナにSSHする

boot2dockerとは

OSXでDockerが気軽に試せるやつだと思ってます。 Docker大好きなんですが、いつもCoreOSで動かしていました。 今回はじめてboot2dockerを使ってみました。 コンテナに直接SSHするのに多少試行錯誤したので記録残しておきます。

インストール

$ brew install boot2docker docker

でたぶん入りました、眠くてよく覚えてないけど、インストールはとりあえずハマらなかったです。 私の場合はVirtualBoxがもともと入っていたので、すんなりいったのかもしれません。

$ boot2docker up

こんなんでVMが動くと思います。 実態としてはVirtualBoxがdocker専用機VMを動かしているだけのようです

$ VirtualBox

とかやるとこんな感じ。

コンテナ作ってSSHしてみる

いつもならLinuxの上でDocker使うので、楽なんですが、今回はVMが間に入っているのでよくわかりません。 とりあえず以下のようにしたら出来た。

sshdの動くイメージを作る

まず適当なイメージを作ります。 Centossshdが動くイメージをビルドしてみます。 Dockerfileはこちらのページを大いに参考にしました。こんなん↓。

# inspired from http://www.nerdstacks.net/2014/03/ssh-ready-centos-dockerfile/

FROM centos:6.6
MAINTAINER Tsuyoshi HOSHINO
RUN yum update -y
RUN yum -y install openssh-server sudo

## Create user
RUN useradd docker; passwd -f -u docker

## Set up SSH
RUN mkdir -p /home/docker/.ssh; chown docker /home/docker/.ssh; chmod 700 /home/docker/.ssh
ADD id_rsa_insecure.pub /home/docker/.ssh/authorized_keys  # id_rsa_insecure.pub は普通に公開鍵でいいけど、今回は適当なペアを作ってADDしています

RUN chown docker /home/docker/.ssh/authorized_keys
RUN chmod 600 /home/docker/.ssh/authorized_keys

## setup sudoers
RUN echo "docker ALL=(ALL) ALL" >> /etc/sudoers.d/docker

## Set up SSHD config
RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

## Init SSHD
RUN /etc/init.d/sshd start
RUN /etc/init.d/sshd stop

CMD /usr/sbin/sshd -D

docker build(docker imageをつくる)します。-tで適当なタグを付ける。

$ docker build -t hoshinotsuyoshi/centos-sshd .

イメージが出来ました。

コンテナを動かす

docker runします。--rmオプションはコンテナが残らないので管理が楽です。

$ docker run -it --rm -p 40022:22 hoshinotsuyoshi/centos-sshd

SSHする

いつもなら別窓でssh docker@localhost -p 40022とかやれば動きそうですが、そうはいきません。 dockerの実態はVMで動いてるだけなので、直接コンテナに触ることが出来ないのでした。 今回は別窓で以下の様な接続を張ってみました。

ssh -N -L 40000:0.0.0.0:40022 docker@192.168.59.103 -i ~/.ssh/id_boot2docker 

192.168.59.103echo $DOCKER_HOST で得られるVMIPアドレスです。VMの40022番ポートをOSXの40000番ポートに繋いでいます。 これで、さらに別窓でSSHすることができます

ssh docker@localhost -p 40000 -i ./id_rsa_insecure #(dockerfileでADDした公開鍵のペア鍵)

お疲れ様でした! vagrantナシでVirtualBox使うという時点で苦手意識あったんですが、最初のBoxのイメージをダウンロードした後は(ここで寝落ち)、ほぼググりながら1時間ぐらいで出来た!