• 検索結果がありません。

ChefsMeeting.nagoya 2014/09/24 Vol.4 Chef Container

N/A
N/A
Protected

Academic year: 2021

シェア "ChefsMeeting.nagoya 2014/09/24 Vol.4 Chef Container"

Copied!
50
0
0

読み込み中.... (全文を見る)

全文

(1)

ChefsMeeting.nagoya

2014/09/24 Vol.4

(2)

自己紹介

● 伊東 宏起 (@_nihi)

来栖川電算 Infrastructure Support Engineer

最近は IPv6 に興味があります

社内では Zabbix 管理したり、ネットワークの保守をしたり

来年からさくらインターネットで働きます

● はまじ (@HmjKRS)

来栖川電算 Development Support Engineer

Vagrant + Chef を独学した人

普段は

Jenkins や Atlassian 製品のプラグインを作ったり

ふつうのプロジェクトのテストや CI したり

Java 研修担当

引きこもり系エンジニア

(3)

勉強会のきっかけ

● 主催者は完全に独学

● Web 上にまともな情報が少ない、見つけにくい

「やってみた」系記事が多く、そのほとんどがノイズ

明らかに使ったこともない人が書いてる記事がある

● なんとなく使えているけど。。

これほんとうにあってるのかな?

もっと楽な方法はないのかな?

→ 情報交換したい!

(4)

本日の内容

1. Chef Container とは

2. Chef Container を試す

1) 環境構築

2) 初期化

3) Attribute の定義

4) イメージのビルド

5) コンテナの起動

現時点での Chef Container をオススメしたいわけではありません …

(5)
(6)

Chef Container

● どういうもの?

(7)

Chef Container

● どういうもの?

Docker 流行ってるけど今まで Chef で書いていたものを

Dockerfile に書き直すのしんどい

(8)

Chef Container

● どういうもの?

Docker 流行ってるけど今まで Chef で書いていたものを

Dockerfile に書き直すのしんどい

knife でイメージをつくれるようにしたよ!

knife-container

※ Recipe の実行は後述の chef-init が担当

(9)

Chef Container

● どういうもの?

Docker に init システムがなくて

(10)

Chef Container

● どういうもの?

Docker に init システムがなくて

サービス管理がしんどい

runit で管理できるようにしたよ!

chef-container(chef-init)

(11)

● つまりどういうことだってばよ…

Chef Container

knife-container Docker Engine container runit chef-init Apache MySQL entry point execute image commit knife chef-container build

(12)

インストール

● [前提] Docker & ChefDK

● Chef Container 本体をインストール

● Chef Container のインタフェースをインストール

$ chef gem install knife-container --no-rdoc --no-ri

(13)

Chef Container を試す

(14)

必要なソフトウェア

VirtualBox

https://www.virtualbox.org/

Vagrant

(15)

Vagrant プラグイン

VM に Chef をインストールするプラグイン

VM の Guest Additions を更新するプラグイン

$ vagrant plugin install vagrant-omnibus

(16)

VM を起動、ログイン

ChefsMeeting リポジトリを Clone

開発環境 VM を起動

ログイン

$ cd chefs_meeting/environments/chef-container/ $ vagrant up

$ git clone https://kurusugawa.jp/stash/scm/chef/chefs_meeting.git

(17)

Chef Container を試す

1. 環境構築

→ 完了

2. 初期化

3. Attribute の定義

4. イメージのビルド

5. コンテナの起動

(18)

Chef Container を試す

(19)

初期化

● knife container docker init

● <image>

: これからつくるイメージの名前

● -r <run_list>

: chef-init の run_list

● -z

: ローカルモード

● -b

: Berkshelf をつかう

● -f <image>

: 使用するベースイメージ

詳細: https://docs.getchef.com/plugin_knife_container.html#docker-init

(20)

初期化

● knife container docker init

● 何が起こるか

ベースイメージが pull される

必要なファイルが生成される

(21)

初期化

● knife container docker init

● pull されたイメージ

$ docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE chef/ubuntu-12.04 latest cc83fc2b4611 3 weeks ago 289.2 MB

chefs_meeting/demo latest cc83fc2b4611 3 weeks ago 289.2 MB

0.2.0 では Docker Hub の chef リポジトリ(https://registry.hub.docker. com/repos/chef/)

にあるイメージのみベースにできる。

(22)

初期化

● knife container docker init

● 生成されたファイル

$ tree dockerfiles/ dockerfiles/ └── chefs_meeting └── demo ├── Berksfile ├── Dockerfile └── chef ├── first-boot.json └── zero.rb 3 directories, 4 files Image と同名のディレクトリが生成された。

(23)

初期化

● knife container docker init

● 生成されたファイル

$ tree dockerfiles/ dockerfiles/ └── chefs_meeting └── demo ├── Berksfile ├── Dockerfile └── chef ├── first-boot.json └── zero.rb 3 directories, 4 files 生成された Dockerfile。 chefs_meeting/demo をベースに chef-init を実行する構成に なっている。

(24)

初期化

● knife container docker init

● 生成されたファイル

$ tree dockerfiles/ dockerfiles/ └── chefs_meeting └── demo ├── Berksfile ├── Dockerfile └── chef ├── first-boot.json └── zero.rb 3 directories, 4 files chef-init が参照する json ファイル。 init 時に指定した run_list がここに書かれている。 このファイルはあとで編集する必要がある。

(25)

初期化

● knife container docker init

● 生成されたファイル

$ tree dockerfiles/ dockerfiles/ └── chefs_meeting └── demo ├── Berksfile ├── Dockerfile └── chef ├── first-boot.json └── zero.rb 3 directories, 4 files -b オプションをつけたので Berksfile が生成された。 init 時に指定した run_list の Cookbook が

Supermarket からダウンロードされるように記述されている。 $ knife container docker init chefs_meeting/demo -r 'recipe[apache2]' -z -b -f chef/ubuntu-12.04

(26)

Chef Container を試す

1. 環境構築

→ 完了

2. 初期化

→ 完了

3. Attribute の定義

4. イメージのビルド

5. コンテナの起動

(27)

Chef Container を試す

(28)

あれ、ちょっと待って!

docker コンテナって、

init システムを持ってないんだよね?

Recipe の中で service Resource を書いても

docker コンテナには効かない…?

Node Attribute の定義

(29)

Recipe の中で service Resource を書いても

docker コンテナには効かない…?

代わりに container_service Resource がある

Node Attribute の定義

(30)

container_service Resource って?

● chef-init が Recipe を収束するときに、

service Resource の代わりに叩いてくれる Resource

● runit によるサービスの管理を提供

(31)

container_service Resource を使うには

● Recipe に書いてある service Resource と

runit のコマンドのひも付けが必要

(32)

container_service Resource を使うには

● Recipe に書いてある service Resource と

runit のコマンドのひも付けが必要

Node Attribute の定義

(33)

container_service Resource のひも付けを定義

Node Attribute の定義

$ vi dockerfiles/chefs_meeting/demo/chef/first-boot.json { “run_list”: [“ “recipe[apache2]” ], “container_service”: { “apache2”: {

“command”: “/usr/sbin/apache2 -k start” }

} }

apache2 Cookbook の中で service[apache2] Resource を使用している。 これに対応するコマンドをここで定義しなければならない。

(34)

Chef Container を試す

1. 環境構築

→ 完了

2. 初期化

→ 完了

3. Attribute の定義

→ 完了

4. イメージのビルド

5. コンテナの起動

(35)

Chef Container を試す

(36)

イメージのビルド

● knife container docker build

● <image>

: これからつくるイメージの名前

● -z

: ローカルモード

(37)

イメージのビルド

● knife container docker build

● 何が起こるか

Dockerfile が実行される

chef-init が実行される

run_list の Recipe が収束される

イメージがコミットされる

(38)

イメージのビルド

● knife container docker build

● コミットされたイメージ

$ knife container docker build chefs_meeting/demo -z

$ docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE chefs_meeting/demo latest 857e880a046d 23 seconds ago 290 MB

(39)

Chef Container を試す

1. 環境構築

→ 完了

2. 初期化

→ 完了

3. Attribute の定義→ 完了

4. イメージのビルド

→ 完了

5. コンテナの起動

(40)

Chef Container を試す

(41)

コンテナの起動

● docker run

● -d

: デーモンモード

(コンテナのバックグラウンド実行)

● <image>

: ベースイメージの名前

$ docker run -d chefs_meeting/demo

(42)

コンテナの起動

● docker run

● 起動されたコンテナ

$ docker run -d chefs_meeting/demo

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

(43)

コンテナの起動

● docker run

● コンテナ内のプロセス

$ docker run -d chefs_meeting/demo

$ docker top `docker ps -q | head -n 1`

UID PID PPID C STIME TTY TIME CMD

root 4982 4976 0 15:27 ? 00:00:00 /opt/chef/embedded/bin/ruby /usr/bin/chef-init --onboot root 5037 4982 0 15:27 ? 00:00:00 /opt/chef/embedded/bin/runsvdir -P /opt/chef/service 'log:...'. root 5243 4982 0 15:28 ? 00:00:00 /usr/sbin/apache2 -k start

33 5366 5243 0 15:28 ? 00:00:00 /usr/sbin/apache2 -k start 33 5367 5243 0 15:28 ? 00:00:00 /usr/sbin/apache2 -k start 33 5368 5243 0 15:28 ? 00:00:00 /usr/sbin/apache2 -k start 33 5425 5243 0 15:28 ? 00:00:00 /usr/sbin/apache2 -k start

(44)

コンテナの起動

● docker run

● コンテナのIPアドレス

● コンテナの apache にアクセス

$ docker run -d chefs_meeting/demo

$ docker inspect --format="{{ .NetworkSettings.IPAddress }}" `docker ps -q | head -n 1` 172.17.0.8

$ curl http://172.17.0.8/

<!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 172.17.0.8 Port 80</address> </body></html>

(45)

Chef Container を試す

1. 環境構築

→ 完了

2. 初期化

→ 完了

3. Attribute の定義→ 完了

4. イメージのビルド

→ 完了

5. コンテナの起動

→ 完了

(46)

Chef Container を試す

1. 環境構築

→ 完了

2. 初期化

→ 完了

3. Attribute の定義→ 完了

4. イメージのビルド

→ 完了

5. コンテナの起動

→ 完了

おつかれさまでした!

(47)
(48)

来栖川電算

● 概要:10周年!

名古屋工業大学発ベンチャー(2003年)

● 目的:

ロボの頭脳を作る

知的インターフェイスによる社会の変革

ソフトウェアの品質・生産性の向上

● スタッフ:30人

役員3人、正社員11人、見習い10人

データ作成5人、家政婦1人

IPA未踏ソフトウェア経験者多数

● 社風:

難しいことを楽しく

職人、挑戦、自由、昼食・夕食・飲み会は

無料

(49)

スタッフ募集中

気軽にオフィスへ遊びに来てね!

見学

できて、

ご飯

も食べれて、

泊まれる

名古屋本社

(2013フロア増設) イオン千種・名大病院・名工大の近く

東京本社

(2012開設) 入谷駅、鶯谷駅、上野駅の近く

(50)

参照

関連したドキュメント

◯また、家庭で虐待を受けている子どものみならず、貧困家庭の子ども、障害のある子どもや医療的ケアを必

   遠くに住んでいる、家に入られることに抵抗感があるなどの 療養中の子どもへの直接支援の難しさを、 IT という手段を使えば

子どもたちが自由に遊ぶことのでき るエリア。UNOICHIを通して、大人 だけでなく子どもにも宇野港の魅力

高さについてお伺いしたいのですけれども、4 ページ、5 ページ、6 ページのあたりの記 述ですが、まず 4 ページ、5

 今日のセミナーは、人生の最終ステージまで芸術の力 でイキイキと生き抜くことができる社会をどのようにつ

・私は小さい頃は人見知りの激しい子どもでした。しかし、当時の担任の先生が遊びを

自分ではおかしいと思って も、「自分の体は汚れてい るのではないか」「ひどい ことを周りの人にしたので

現を教えても らい活用 したところ 、その子は すぐ動いた 。そういっ たことで非常 に役に立 っ た と い う 声 も いた だ い てい ま す 。 1 回の 派 遣 でも 十 分 だ っ た、 そ