今さらだけど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の動くイメージを作る
まず適当なイメージを作ります。 Centosでsshdが動くイメージをビルドしてみます。 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.103
はecho $DOCKER_HOST
で得られるVMのIPアドレスです。VMの40022番ポートをOSXの40000番ポートに繋いでいます。
これで、さらに別窓でSSHすることができます
ssh docker@localhost -p 40000 -i ./id_rsa_insecure #(dockerfileでADDした公開鍵のペア鍵)
お疲れ様でした! vagrantナシでVirtualBox使うという時点で苦手意識あったんですが、最初のBoxのイメージをダウンロードした後は(ここで寝落ち)、ほぼググりながら1時間ぐらいで出来た!