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