memorycraftです。

またまた今更ですが、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#

うまくつながりました!
とりあえず今回は以上です。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら