カテゴリー別アーカイブ: Docker

kitchen-dockerでEC2の料金をかけず、高速にAmazon LinuxでのCookbookのテストを行う方法

2014.04.28 追記:

ライセンスについてのご質問をいただいたので追記しました。

 

最近、Kitchen-dockerでCookbookのテストを流すようになり、

捗ってはいたのですが、

仕事ではCentOSとAmazon Linuxの両方を使うことがあり、

お互いRHEL互換で大体同じで通るとはいえ、

ちゃんと両方でテストしないといけないよな〜と思っていました。

でも、Amazon Linuxを使おうと思うと、

kitchen-ec2とかvagrant-awsとかで立ち上げる感じになって、

やっぱり仮想マシンの立ち上げが遅いんですよね。

あと、課金を気にしなきゃいけないのが一番やりにくい。

 

とりあえず、今やってるCookbookの充実&リファクタリングは早く終わらせたかったので、

CentOSだけで作って後で考えようかと思っていたのですが、

ちょっと良い方法を思いついたので試してみました。

 

 

その内容は、

「Amazon LinuxのDocker Imageって作れたらkitchen-dockerで使えたりしないのかな?」

 

って感じです。で、調べてみたら、

Amazon LinuxのDocker Imageを作った例

※「Amazon Linux Docker Image」のセクション

があったので、いけそうな気がしてやってみました。

 

以下、手順です。

※「marcy/amzn」の所は 各々のリポジトリ名に置き換えてください。

 

①まず、上記リンクの通りにDocker Imageを作成します。

 

②kitchen-dockerの実行に必要な変更を施します。

# docker run -t -i local/amzn /bin/bash
bash-4.1# rm -f /etc/ssh/ssh_host_*
bash-4.1# sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config

Docker Registoryへpushします。

# docker ps -a
 # docker commit ${CONTAINER ID} marcy/amzn
 # docker push marcy/amzn

※${CONTAINER ID}にはdocker ps -aで確認したCONTAINER IDが入ります。

④Tagを切ります(これは無くてもいけるけど)

# docker images
 # docker tag ${IMAGE ID} marcy/amzn:2014.03.1
 # docker push marcy/amzn

※${IMAGE ID}にはdocker imagesで確認したIMAGE IDが入ります。

 

実際には②で施した変更は実行してみて動かなくて直しました。

変更して再度pushするのは以下のような感じです。

# docker run -t -i marcy/amzn /bin/bash
 bash-4.1# 変更実施
 # docker commit ${CONTAINER ID} marcy/amzn
 # docker tag ${IMAGE ID} marcy/amzn:2014.03.1
 # docker push marcy/amzn

リポジトリ上だけ更新しても、

一度取得してしまったkithcen-docker実行側には反映されないので更新します。

# docker pull marcy/amzn:2014.03.1

 

こんな感じでできあがったDocker Imageを、

以下のような.kitchen.ymlで指定してやるとAmazon Linux のテストができます。

CentOSとかだとnameに「centos-6.4」と書くだけで良い感じにしてくれるのですが、

「marcy/amzn-2014.03.1」とかにしてしまうと、

nameから自動生成したファイルを使うような処理で、

スラッシュがディレクトリとして扱われて

「Not such file or directory」で落ちるので注意です。

 

これで、EC2の課金を気にせず、

かつ高速にAmazon Linuxでtest-kitchenのテストが回せます。

 

また、今回作成したDocker ImageはPublicにしてあるので、

使っていただいても構いません。

 

 

あれ?

ていうか、自分の所ではEC2上でやったのですが、

もしかしてコレって…

厳密に同じでは無いものの、

Amazon LinuxがAWS以外でも手軽に動かせるようになったってことでは???

 

2014.04.28 追記:

「ライセンスって大丈夫なの?」とご質問をいただきました。

調べた限りではライセンスについての記述は見当たらず、

AMIの公開が万人に許されていることから、

AWS EC2上かつ個人での利用については問題無い or グレーゾーンであると個人的には解釈していますが、

実施の際は自己責任でお願い致します。

また、よくあるご質問に以下の記載があるので、

Q: Amazon Linux AMI は EC2 以外でサポートされますか?

いいえ。Amazon Linux AMI は、Amazon EC2 内のみで使用可能です。

AWS EC2以外での動作は現状辞めておいた方が良さそうです。

 

 

 

全然別件ですが、もしChefネタなので一応宣伝。

札幌に在住の方がもし居ましたら、

こんなんやりますので、ご興味あればどうぞ。

Chef Meetup Sapporo