そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

Docker - Dockerizing してみる


Dockerfile からDockerイメージを作成して環境をためしてみた。
chef と同じように、コード(こちらはGo言語)で構成管理を記述できる。

役割毎にDockerコンテナーを作成することで、1つのOS上で環境を構築
できる。
ハイパーバイザーの仮想化のようなボトルネックもなく、他環境を壊す心配もないので、
開発時にはとても重宝しそう。

Chef Container で、Chefから管理できるようになってきているみたい。
インフラ自動化ツールのChefもDocker対応へ。「Chef Container」ベータ版発表 - Publickey

今回の環境

ホストは CentOS-6.5 さくらVPS
ゲストは CentOS-7

Dockerfile を作成する

とりあえず ruby をインストールしてみる。
わかりやすいようにディレクトリを掘ってから作成した。

$ mkdir -p docker/ruby
$ cd docker/ruby
$ vim Dockerfile

Dockerfile は Go でかかれているようだがこれは設定ファイルのようなもの。

リファレンス: Dockerfile - Docker Documentation

# ベースとなるDockerイメージを指定。キャッシュがなければpullされる。
FROM    centos:centos7
MAINTAINER      babio "babio@desu"

RUN yum update -y
RUN yum install -y ruby

CMD ["which", "ruby"]

docker build でイメージを作成する

$ docker build --rm -t centos7_ruby .

Dockerファイルのコマンド毎にDockerコンテナーが作成し
変更を反映し、コンテナーを削除して(--rmオプション指定時)、
タグ名が centos7_ruby な Dockerイメージが作成される、という流れ。

docker run で確認してみる

$ docker run --rm centos7_ruby
/usr/bin/ruby

ruby のパスが表示されて終了。
終了するとDockerコンテナーは削除される(--rmオプション指定時)。

この Bashインタラクティブに使ってみる。

$ docker run -i -t --rm centos7_ruby /bin/bash
bash-4.2# which ruby
/usr/bin/ruby

もちろんpullしたイメージにrubyは入っていません。

$ docker run -i -t --rm centos:centos7 /bin/bash
bash-4.2# which ruby
which: no ruby in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)