Dockerとは何か

Dockerについて調べたので概要と簡単な使い方のメモ

Dockerとは何か

いわゆるコンテナ型仮想化ツールの1つです。
VMwareやKVMのような完全仮想化と違い、
ユーザや、ネットワーク、ファイルシステムなどを隔離した環境を作ってそこで動くらしいです。

あくまで隔離された環境のため、環境ごと作る完全仮想化に比べてオーバーヘッドが少なく、
手元の数年前のmac book airでもかなり快適に動いています。

あくまでゲストOSを隔離環境に置いただけのため 、
ファイルシステムは分離されておらず、ホストからは中身が見えるのも特徴らしいです。
(ゲストからはホストの中身は当然見えない)

また、DockerではDockerfileというファイルに設定を書くことで、
その設定を反映した状態のコンテナを作成することが出来ます。
そのため、OSの状態をDockerfileとして管理でき、いわゆるimmutable infrastructureと相性がいいみたいです。

Docker上のCent OSにJenkinsを立てる

Dockerの起動

Dockerコマンドを実行するためには、Macだとboot2dockerを
boot2docker startで起動し、そのとき提示された環境変数を設定する必要があります。

また、
boot2docker ip
を実行し、コンテナに対してアクセスできるようにする必要があります。
なお、この時出たURLは後で使います。

Cent OSの構築

Dockerfileの準備

以下のファイルをDockerfileという名前で適当なディレクトリに保存します。

FROM centos:centos6

RUN curl -o /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
RUN rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
RUN yum -y install java-1.7.0-openjdk jenkins

見ての通り、Jenkins公式の入れ方のコマンドを実行しているだけです。

コンテナの作成

次に、Dockerfileを保存したディレクトリで
docker build -t jenkins . を実行し、カレントディレクトリのDockerfileを使って、jenkinsというタグをつけてコンテナを作成させます。

コンテナの起動

docker run -p 8080:8080 -i -t jenkins bash
を実行してホストの8080とコンテナの8080を結びつけ、先ほど作ったjenkinsコンテナにbashで入り、
service jenkins start
を実行するとjenkinsが起動します。

この状態で、boot2docker ipで出てきたURLの8080ポートにブラウザでアクセスすると、
いつものJenkins画面が表示されます。

その他

Dockerには他にも、VMのスナップショットのように作成したOSのイメージを保存しておき、
それを他のセットアップの下地にするといったことも出来るそうです。

また、Dockerはフォアグラウンドのプロセスがないと自動的に終了するため、
Jenkinsの用にサービスとして動かすものは、ログインして起動するか特別な方法で落とさない工夫が要るみたいです。
今回はとりあえずさわりだけなので、手で起動してログインしっぱなしにしています。