こんにちは、SI部の宮内です。 今回は次世代仮想化技術として注目を集めているDockerについて その概用をおさえつつ、コンテナ作成の流れを体感していきたいと思います。

Dockerとは

Dockerとは社Docker社(旧dotCloud)が開発するオープンソースのコンテナ管理ソフトウェアの1つです。 2013年3月20日に最初のバージョンがリリースされ、先日には初の正式版Docker 1.0がリリースされました。
現在Red Hat、Google、AWSなど数多くの企業がDockerをサポートしています。
Dockerには以下のような特徴があります

•Go言語で書かれている
•ホストOS上にコンテナの形で仮想化を実現する
•ゲストOSがなくLinuxのカーネルを共有するためビルド、デプロイが高速でオーバーヘッドが小さい
•アプリケーションをコンテナにパッケージングしデプロイ、実行できる
•開発者環境でビルドしたDockerコンテナをそのまま本番環境で実行可能
•運用者はコンテナの外部だけを管理
•Dockerfileと呼ばれる仕組みでインフラストラクチャーをソースコードで管理可能
•AUFS(親コンテナからの差分のみを保存していく)

DockerでRedmineの環境を構築する

今回はVagrantで構築したUbuntuにDockerをインストールし、Redmineイメージを取得、イメージからコンテナを作成、起動しRedmineの環境を構築することで、Dockerを体感してみたいと思います。
なお、本記事はVagrant、VirtualBoxはインストール済みであることを前提とします。それらのインストールに関しては他のサイトをご参考ください。

環境

今回は以下の環境で実施しました
Mac OS X 10.9.2
VirtualBox 4.3.12
Vagrant 1.6.3
Box:Ubuntu Trusty 14.01(LTS)(64-bit)
Docker 1.0.1

VagrantでUbuntuの環境を用意する

ubuntuのboxイメージ取得

今回はtrustyを利用します。

vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

フォルタの作成と初期化

Docker用のフォルダを作成して(任意の場所に)初期化を実施します。

mkdir docker
cd docker
vagrant init trusty64

Vagrantfileの編集

初期化によりカレントディレクトリにVagrantFileが作成されるので続いて、ポートフォワーディングを設定します。

vi Vagrantfile

config.vm.networkのコメントアウトをはずし編集します。

config.vm.network :forwarded_port, guest: 80, host: 4000

Ubuntuを起動、接続

vagrant up
vagrant ssh

Dockerをインストールする

続いて、UbuntuにDockerをインストールしていきましょう。

リポジトリの登録

sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80
–recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo sh -c “echo deb https://get.docker.io/ubuntu docker main\
>/etc/apt/sources.list.d/docker.list”

インストール

sudo apt-get update
sudo apt-get install lxc-docker

バージョン確認

ここでDockerのバージョンを確認してみましょう。

sudo docker version

以下のようにClientとServerのバージョンが表示されることを確認してください。
dockerlatestversion

Redmineのイメージ取得

つづいてRedmineのイメージを取得します。 今回はこちらで配布されているもの利用させていただきました。

sudo docker pull sameersbn/redmine:latest

※環境によっては数十分かかるかと思います。

イメージを確認

pullしてきたイメージを確認します。

sudo docker images

REPOSITORY sameersbn/redmineが表示されることを確認してください。

dcokerimages

初期設定

つづいてredmineの初期設定を実施していきます。

sudo mkdir -pv /opt/redmine/files
sudo mkdir /opt/redmine/mysql

コンテナを作成、実行

さて、いよいよコンテナ作成し起動してみましょう。以下のコマンドを実行してください。

sudo docker run -d -p 80:80\
-v /opt/redmine/files:/redmine/files \
-v /opt/redmine/mysql:/var/lib/mysql
sameersbn/redmine:latest

起動オプションはそれぞれ下記を表しています。

– d バックグラウンドで実行
-p ポートフォワーディングの設定(hostPort:containerPort)
-v ボリュームをマウントする

※今回は設定を簡略化するために内部のMySQLServerを利用しています。実際にはDBを別コンテナに分割するか外部のサーバを利用することが奨励されています。
詳細はこちらをご確認ください。

コンテナを確認

コンテナが起動されたか確認してみましょう。以下のコマンドで起動中のコンテナ一覧を確認します。

sudo docker ps

先ほど作成したコンテナが表示されます、またここでCONTAINER IDが表示されていることにも注目してください。

sudodockeps

ブラウザから確認

以下のURLでアクセスしてみましょう。

http://localhost:4000/

下記のようにRedmineのログイン画面が表示されたら成功です。 redminetop

コンテナの停止、再実行、削除

最後に、停止と再実行を実施してきたいともいます。それぞれCONTAINER IDを指定し実施します コンテナを停止

sudo docker stop 518d14ca5ea4

コンテナを再起動

sudo docker start 518d14ca5ea4

まとめ

今回はDockerでイメージの取得しコンテナ作成、起動することを実施しました。 DockerではDockerfileを作成することでベースとなるイメージをもとにカスタマイズしたイメージ作成することが可能です。興味がある方は是非トライしてみてください。