LoginSignup
10
10

More than 5 years have passed since last update.

Chef-containerを試してみる

Last updated at Posted at 2014-10-23

はじめに

仕事忙しくて全然知らなかったんですけど、Chef-containerというのがリリースされたらしいです。
Cookbookとかの既存資産を流用できるのは大きいなあ、と思いつつ、そうでないなら別に使う必要ないのかも、なんて言いながら、やっぱり興味があるのでちょっと遊んでみます。
以下、ちょっと動かしてみた記録。導入手順くらいにはなると思います。
※dockerをsudoなしで実行できるようにしてます。

環境

  • Ubuntu 14.04
  • Ruby 2.1.2p95
  • Docker 1.3.0

準備

前提として、既にRubyDockerの準備が済んでるものとします。

$ mkdir cc-test
$ cd cc-test
$ vi Gemfile
$ bundle install --path=vendor/bundle
$ bundle exec knife container docker init chef/ubuntu-14.04 -r "recipe[apache2]" -z -b
$ docker images
REPOSITORY            TAG                   IMAGE ID            CREATED             VIRTUAL SIZE
chef/ubuntu-12.04     11                    50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-12.04     11.16                 50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-12.04     11.16.2               50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-12.04     latest                50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-14.04     latest                50d3c5c9e133        4 weeks ago         311.9 MB
$ tree dockerfiles
dockerfiles
└── chef
    └── ubuntu-14.04
        ├── Berksfile
        ├── Dockerfile
        └── chef
            ├── first-boot.json
            └── zero.rb
Gemfile
source 'https://rubygems.org'

gem 'berkshelf'
gem 'knife-container'
gem 'chef-container'

これで準備できたっぽい?
あとは必要なCookbookをBerksfileに突っ込んで、first-boot.jsonをごちゃごちゃすればいいのかな。

起動してみる

の前に、Dockerなので、イメージをビルドしなきゃいけません。
ビルドしてから起動します。

$ bundle exec knife container docker build chef/ubuntu-14.04 -z
# Berkshelf使ってCookbook落としてきたり、いろいろしてるみたい
# パッと見、いったんコンテナ起動して、なんやかやしているようにも見える。気のせいかもしれない。
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
chef/ubuntu-14.04   latest              2e5a819f5009        2 minutes ago       351.3 MB
chef/ubuntu-12.04   11                  50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-12.04   11.16               50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-12.04   11.16.2             50d3c5c9e133        4 weeks ago         311.9 MB
chef/ubuntu-12.04   latest              50d3c5c9e133        4 weeks ago         311.9 MB
$ docker run -P chef/ubuntu-14.04
# Chefがいろいろやってる
# 何してるのか見たかっただけなので、抜ける
$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                CREATED              STATUS                          PORTS                   NAMES
f9bbf8437f96        chef/ubuntu-14.04:latest   "chef-init --onboot"   About a minute ago   Up About a minute               0.0.0.0:49156->80/tcp   sick_euclid
$ curl localhost:49156
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL / was not found on this server.</p>
<hr>
<address>Apache Server at localhost Port 49156</address>
</body></html>

動いた、っぽい?
ポートなんかはもしかしたら自分でEXPOSEしなきゃいけないのかと思ってたんですけど、80だけは解放してくれてました
# 誰がどこでやってるのかはわかりません。。。

※今もう一度最初からやってみたら、解放してくれてませんでした。。。
 多分いろいろやってた時のイメージがそのまま残ってたんだと思います。
 この辺は、後でDockerfile弄ってEXPOSEしろってことなんですね(ですよね?)。

所感

Chef-container動かすのに(当然ですが)コンテナの中にChef-initを入れておく必要があるので、その辺ちょっと面倒だなー、と。
まあchef/ubuntu-14.04をベースに、適当な名前でイメージ作ってDockerHubにあげておいて、それに作りこんでいく って形に今のところはなるのかな。
いかんせんまだβなので、まだまだ便利になっていくのだろうと思ってます。

とりあえずもうちょっと遊んでみようと思います。

追記

勘違いしてました。

$ bundle exec knife container docker init agen/image_name -z -b -f chef/ubuntu-14.04:latest -r 'recipe[apache2]'

チュートリアルがそうだったので、てっきりそうでしか使えないのかと思ってたんですけど、chef/ubuntu-14.04:latestをベースに、自分で好きな名前でタグ付けしてくれるんですね。。。

ちなみに、とりあえずDockerfileだけ作りたかったので

$ bundle exec knife container docker init agen/image_name -z -b -f chef/ubuntu-14.04:latest

としたら、first-boot.jsonとかzero.rb作ってくれませんでした。
-b指定したのが悪いのかと思って-b抜いて実行すると、ちゃんとfirst-boot.jsonzero.rbは作ってくれたんですけど

$ bundle exec knife container docker init agen/image_name -z -f chef/ubuntu-14.04:latest
$ bundle exec knife container docker build agen/image_name -z
2014/10/24 14:52:01 stat ./dockerfiles/agen/image_name: no such file or directory

と怒られました。
この時のディレクトリ構成は

$ tree dockerfiles
dockerfiles
└── agen
    └── image_name
        ├── Dockerfile
        └── chef
            ├── cookbooks
            ├── first-boot.json
            └── zero.rb

Berkshelf使ってた時と違い、cookbooksなんてディレクトリが作られてます。
Cookbookないしfirst-boot.jsonrun_listは空だしで、まあ怒られるとは思ってたんですけど、「そんなディレクトリない」と怒られると、なんだかもやっとします。

仕方ないので、-b指定した上で、とりあえず-r 'recipe[apache2]'付けてやってみたところ、

$ bundle exec knife container docker init agen/image_name -z -b -f chef/ubuntu-14.04:latest -r 'recipe[apache2]'
$ tree dockerfiles
dockerfiles
└── agen
    └── image_name
        ├── Berksfile
        ├── Dockerfile
        └── chef
            ├── first-boot.json
            └── zero.rb
$ bundle exec knife container docker build agen/image_name -z
2014/10/24 15:29:30 no Dockerfile found in ./dockerfiles/agen/image_name

無理でした。
こうなると、怒られた時点でいったいカレントディレクトリはどこになってるのか? と思ってきますよね。
なので、フルパスで指定してみました。

$ bundle exec knife container docker init agen/image_name -z -b -f chef/ubuntu-14.04:latest -r 'recipe[apache2]'
$ bundle exec knife container docker build agen/image_name -z -d `pwd`/dockerfiles
Successfully built e02b85fd1df6

さすがにこれで動かないってことはないだろうと思ってたんですけど、やっぱり動きました。
ちゃんとdocker runできます。

つーわけで、たぶんカレントディレクトリが自分の意図しないところになってて、やれDockerfileがないだのと怒ってたのだと断定。
しかしそうなると、なんで追記前の状態ではちゃんと動いたのだろう? とマジで謎。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10