SHOYAN BLOG

I am a pragmatic programmer.

DockerコンテナにChefを流してみた

Chefのレシピを書くとき、Dockerコンテナにレシピを流せると気軽に確認ができてよいなと思い、DockerコンテナにChefを流せるようにしてみました。

リポジトリを作ったので参考にどうぞ。
https://github.com/shoyan/nginx-and-ruby-on-docker

Install

DockerとChefをインストールしている必要があるので、以下からインストールしてください。

Docker

Chef

DockerコンテナにChefを流す

まずは、Docker QuickStart TerminalをクリックしてDockerを起動します(アプリケーションにあります)。

Dockerを起動したらNginxとrubyをインストールするCookbookを実行します。

1
2
$ git clone https://github.com/shoyan/nginx-and-ruby-on-docker
$ cd nginx-and-ruby-on-docker

以下のコマンドでimageをbuildします。

1
$ docker build -t nginx-and-ruby .

imageを確認

1
2
3
$  docker images
REPOSITORY             TAG                            IMAGE ID            CREATED             SIZE
nginx-and-ruby         latest                         6b4d5602119f        36 seconds ago      382.2 MB

Dockerのコンテナを起動します。
image_idは docker imagesのIMAGE IDを指定します。
今回の場合は6b4d5602119fです(場合により変わります)。

1
$ docker run --privileged -d --name nginx-and-ruby image_id /sbin/init

–privilegedはCentOS7のimageでserviceコマンドを起動するおまじないです。
Dockerでsystemctlでserviceが起動できない

起動したDockerのコンテナにログインします。

1
$ docker exec -it nginx-and-ruby bash

ログインしたらDockerコンテナでChefを実行します。

1
# chef-client -z -j nodes/bootstrap.json -c client.rb

Dockerを使うとChefを実行→コンテナを消す→真っさらな状態からもう一度Chefを流すというサイクルが気軽にできるので便利です。

もう一度真っさらな状態のコンテナを作りたいときは、以下のようにします。

1
2
3
4
5
6
7
8
9
$ doker ps
CONTAINER ID        IMAGE                  COMMAND              CREATED             STATUS                        PORTS                                           NAMES
17a11c4b6ce8        6b4d5602119f           "/sbin/init"         2 hours ago         Exited (137) 12 seconds ago                                                   nginx-and-ruby

# Dockerコンテナを消す
$ docker rm -f 17a11c4b6ce8

# dockerコンテナを起動する
$ docker run --privileged -d --name nginx-and-ruby image_id /sbin/init

https://github.com/shoyan/nginx-and-ruby-on-docker

よく読まれている記事

Comments