Docker - Dockerizing してみる
Dockerfile からDockerイメージを作成して環境をためしてみた。
chef と同じように、コード(こちらはGo言語)で構成管理を記述できる。
役割毎にDockerコンテナーを作成することで、1つのOS上で環境を構築
できる。
ハイパーバイザーの仮想化のようなボトルネックもなく、他環境を壊す心配もないので、
開発時にはとても重宝しそう。
Chef Container で、Chefから管理できるようになってきているみたい。
インフラ自動化ツールのChefもDocker対応へ。「Chef Container」ベータ版発表 - Publickey
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オプション指定時)。
$ 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)