またまた今更ですが、Dockerを触ってみました。
Dockerについてはこのスライドがこれ以上ないくらいに、わかりやすく説明してくれています。
今回は、Docker内にCentOSを立ちあげて、SSH接続するまでをやってみます。
Dockerのインストールと起動
docker-ioだと少し古いので、epel-testing というリポジトリからインストールします。
# yum install --enablerepo=epel-testing docker-io-0.7.6-2.el6
docker searchコマンドでcentosのベースイメージを探します。
# docker search centos NAME DESCRIPTION STARS tutum/centos CentOS Docker image with SSH access 5 tianon/centos CentOS 5 and 6, created using rinse instea... 6 centos 23 .......
centosというのが一般的なものらしいので、それを使ってコンテナを起動します。
# docker run -t -i centos /bin/bash
すると、起動したコンテナ内のbashコンソールに自動的に接続されます。
ここからはゲストOSの世界です。
あとで、sshでログインするために、rootのパスワードを設定します。
-bash-4.1# passwd
ここで、まずコンテナ内にopensshをインストールします。
-bash-4.1# yum install openssh openssh-clients openssh-server vim -y
次に、sshd_configで、PAMを使用しないように設定します。(CentOSの場合)
-bash-4.1# vim /etc/ssh/sshd_config
#UsePAM no UsePAM yes ↓ UsePAM no #UsePAM yes
ここまで設定したら、いったんコンテナを抜けてホストOSの世界に戻ってきました。
-bash-4.1# exit
SSH用コンテナの起動
docker ps -aで、現在起動しているゲストOSの一覧を確認します。
centosのコンテナが1つあります。コンテナには一意のID(9c4fd33c4786)がついていて、状態はExitになっています。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c4fd33c4786 centos:6.4 /bin/bash About a minute ago Exit 0 kickass_pare
ここで、この9c4fd33c4786のコンテナをdocker commitコマンドで、イメージ化します。
イメージのリポジトリ名はsshd/centosとします。
# docker commit 9c4fd33c4786 sshd/centos 4e3f5f7e23b22900df3d3752ba4644f2282a5d07176b472b03753bf4ed1bd191
そして、SSH用に、いま作ったsshd/centosのイメージで改めて起動しますが、先ほどとは違い、-dオプションでデーモン化し、sshのポート番号と起動フォアグラウンドプロセスを指定します。それによってsshが起動した状態でコンテナが起動します。
# docker run -d -p 22 sshd/centos /usr/sbin/sshd -D 76451b30b156e0ebb9003152eae0dbe41aa7252d27451fb30a00cdb011ad5e20
SSH接続
起動したSSH用のコンテナは、docker内部では22番ポートですが、ホストOSに対しては別のポートで開いています。docker port コマンドで、コンテナの22番ポートに接続するためのポート番号を調べます。
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4485f95b6c81 sshd/centos:latest /usr/sbin/sshd -D 25 minutes ago Up 25 minutes 0.0.0.0:49158->22/tcp drunk_curie 9c4fd33c4786 centos:6.4 /bin/bash About a minute ago Exit 0 kickass_pare # # # docker port 4485f95b6c81 22 0.0.0.0:49158
どうやら49158ポートにフォワードされるようです。
また、ifconfigをみると、docker0というインターフェースでアクセス先のipが分かります。
# ifconfig docker0 Link encap:Ethernet HWaddr FE:9D:BA:61:73:4F inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:20164 errors:0 dropped:0 overruns:0 frame:0 TX packets:44290 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1155381 (1.1 MiB) TX bytes:64015506 (61.0 MiB)
これで、このコンテナは172.17.42.1の49158でSSHに接続できることが分かりました。
早速接続してみます。
# ssh root@172.17.42.1 -p 49158 The authenticity of host '[172.17.42.1]:49158 ([172.17.42.1]:49158)' can't be established. RSA key fingerprint is f2:72:a0:0d:65:58:bf:c9:d1:3f:10:6c:9e:1c:de:9a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[172.17.42.1]:49158' (RSA) to the list of known hosts. root@172.17.42.1's password: -bash-4.1#
うまくつながりました!
とりあえず今回は以上です。