VMwareやVirtualBoxなどのハイパーバイザ型とは異なり、起動が早く軽い仮想サーバが使えるコンテナ型の仮想化ソフトウェアのDockerについてインストールしてみました。
インストール
公式サイトにある手順を参考にDockerをインストールします。
まずは依存関係のあるパッケージをインストールし、サーバを再起動します。
他のサイトも参考にパッケージは追加しています。
$ sudo apt-get update $ sudo apt-get dist-upgrade $ sudo apt-get install ssh git build-essential libssl-dev $ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring $ sudo reboot
Dockerをインストールします。
$ curl -s https://get.docker.io/ubuntu/ | sudo sh
※warningが出た場合はlxc-dockerをインストールしてくれと書いてありましたが、上記でlxc-dockerも合わせてインストールされるようです。
動作確認
まず、dockerでコンテナ(仮想サーバ)を起動してログインしてみます。
以下の場合、イメージ名がubuntuのコンテナを起動後、bashを実行し、ログインしています。
- iオプションはインタラクティブモードでの起動を示しています。
- tオプションは仮想端末ttyの割り当てを示しています。
$ sudo docker run -i -t ubuntu /bin/bash $ root@11ab5172a0ec:/# uname -a Linux 11ab5172a0ec 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 $ root@11ab5172a0ec:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS" $ exit
コンテナにログイン後、サーバのバージョンを確認してみましたが、Ubuntu14.04が起動していることが分かります。
次に、コンテナの一覧を確認します。
先ほど起動したコンテナが表示されていることが分かります。
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11ab5172a0ec ubuntu:14.04 /bin/bash 58 minutes ago Exited (0) 56 minutes ago condescending_thompson
上記のコンテナからログオフし、再度コンテナを起動すると、別のコンテナとして表示されます。
コンテナの変更を保存するため、以下のコマンドを実行します。
$ sudo docker commit <コンテナID> <イメージ名> #コンテナIDはdocker psで表示された11ab5172a0ecが対応します。
Gitと似ていますが、上記のコマンドを実行することで、コンテナをイメージに変換することができます。
よく使うコマンド
dockerでよく使うコマンドについてまとめてみました。
$ sudo docker ps -a #コンテナの一覧を表示 $ sudo docker rm <コンテナID> #コンテナの削除 $ sudo docker images #イメージの一覧を表示 $ sudo docker rmi <イメージID> #イメージを削除
SSH接続
コンテナにSSH接続するには、コンテナにsshdをインストールします。
今回は、イメージにUbuntu12.04を指定しました。
$ sudo docker run -i -t ubuntu:12.04 /bin/bash root@b9da36681214:/# apt-get update root@b9da36681214:/# apt-get install openssh-server root@b9da36681214:/# mkdir /var/run/sshd root@b9da36681214:/# /usr/sbin/sshd root@b9da36681214:/# passwd root root@b9da36681214:/# exit
上記で作成したコンテナをcommitし、イメージにします。
$ sudo docker ps -a #コンテナIDを確認します。 $ sudo docker commit <コンテナID> ubuntu-sshd
次に、以下のようにubuntu-sshd コンテナを使って /usr/sbin/sshdで実行します。
- pオプションはポートフォワードに使うポート番号を指定しています。
SSHでは22番ポートを使用しているため、22番ポートをフォワードします。
このオプションは複数指定することが可能で、22番ポートと80番ポートを使いたい場合は、-p 20 -p 80と指定します。
$ sudo docker run -d -p 22 ubuntu-sshd /usr/sbin/sshd -D
以下のコマンドで、PORTSの列に「0.0.0.0:[ポート番号]」が表示されますが、これが22番ポートにマッピングされたローカルのポートになります。
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e61ccbe71df ubuntu-sshd:latest /bin/sh -c '/usr/sbi 2 days ago Up 25 hours 0.0.0.0:[ポート番号]->22/tcp loving_almeida
上記で確認したポート番号を指定して、コンテナにSSH接続します。
$ ssh root@127.0.0.1 -p [ポート番号]
今回の構成は、VMware ESXi 5.1上のUbuntu12.04のサーバに、Ubuntu12.04のコンテナを起動しましたが、評判通りコンテナの起動は早く、サーバの負荷は小さいものでした。Chefやserverspecの環境として、使用できる見通しが取れたかと思います。