読者です 読者をやめる 読者になる 読者になる

hidemium's blog

日々学んだことをアウトプットする。

Dockerのインストールと動作確認

VMwareVirtualBoxなどのハイパーバイザ型とは異なり、起動が早く軽い仮想サーバが使えるコンテナ型の仮想化ソフトウェアのDockerについてインストールしてみました。

構成

Ubuntu 12.04 : Docker をインストール
※上記のサーバはVMware ESXi 5.1上で動作しています。

インストール

公式サイトにある手順を参考に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の環境として、使用できる見通しが取れたかと思います。