ページ

2016年2月17日水曜日

Docker Cloud 1.0 を使ってみた

 いつの間にかDockerCloudというDocker社純正のクラウドサービスが登場しておりました。(正確にはTutumのプロダクトがDockerCloudという名前でリスタートしたようです)

Docker Cloud 1.0登場へ。買収したTutumをリブランドしDocker Hub と統合
http://www.publickey1.jp/blog/16/docker_cloud_10.html

 そういえば去年辺りにTutumを買収したというニュースがあったような… すっかり忘れていたというか、Tutumとしてはスタートしてたのを知りませんでした!何かに負けたような気持ちでとても悔しいのでとりあえず使ってみる事にしました!

※今回は使ってみた的な回なのでスクリーンショットが多めです。



 なお、DockerCloudについての使用方法等については、普通のDockerの公式ドキュメントに「DockerCloud」という項目がありますのでそちらを確認すれば良いようです。

DockerCloud
https://cloud.docker.com/

Docker公式ドキュメント
https://docs.docker.com/



 ドキュメントの方は後でじっくりと見る事にして、まずはDockerCloudにアクセスしてみましょう。画面の少し下の方を見ますと料金的な事が書いてあるようですので確認します。


 どうやら1ノード1リポジトリまでは無料というのようです。実際に使う場合は1ノード1リポジトリでは足らないはずですので、まあお試しトライアルは無料ですよって事ですね。とりあえず何かに安心した所で右上のloginボタンでログインしてみます。



 ログイン後のWelcome画面です。チュートリアルウイザード的な画面ですね 。とりあえずはこの流れでボタンをポチポチ押しつつ進めて行けば良いようです。


 右下の辺りにツイッターとかフェイスブック的なノリで おじさんがHi! 等と親しげに話しかけてきております。友達承認するかどうかはこれから決めるのさ!的な思いを胸にとりあえず×ボタンを押下しておきましょう(=゚ω゚)っ ポチ



 とりあえずおじさんは置いておきつつ、最初の「Link a cloud provider」を進めてみます。


 簡単に言いますとバックエンドプロバイダとしてAWSやAzure等色々使えるので、使いたいプロバイダのIDとパスワード等の必要な情報を登録してリンクするんだ!という事ですね。とりあえず今回はAWSで試す事としましてAWSのIAMで作成したキー情報を入力しました。 なお、DockerCloud上から色々とAWSを操作する関係上、使用するIDには以下のようなロールを設定しておく必要があるようです。(設定し忘れて権限が足らない等の場合は、その都度右上の方に赤い吹き出しでその旨の通知が出るようです)

"Action": [
  "ec2:*"
  "iam:ListInstanceProfiles"
]


 
 続きましてWelcome画面で言う所の「Deploy a node」に進みます。ここではクラスタとして使用するノードを設定するようです。

 
  今回はAWSですので、配置するリージョンやインスタンスタイプやそのノードで起動するインスタンス数等を設定するようです。前述のようにPeoviderとしてAWSのキーを設定してある訳なのですが、VPCのIDとかは自動でAWSから取得してくるようです。すごい便利なのですけどちょっとだけ侵入されているような気分です。なお、あとでデプロイで使用するタグも指定出来るようです。

 AWSのECSやDockerSwarmと似たような感じであるようなので、とりあえず感覚でポチポチと入れて右下の「Lounch node cluster」を押してしまいます。(=゚ω゚)っ ポチ



  Deploy中となりました。





 EC2の方にインスタンスを作りに行ってるのかなとEC2の方に確認に行きますと…


 ちゃんとEC2インスタンスが作られています。ちなみに何のイメージを使っているのだろうと確認した所、MarketplaceではなくコミュニティAMIの方にそれ用のイメージが用意されていたようです。

 中身のOSは何なのかとかは今の所謎です。セキュリティグループとかも勝手に作成されて適用されていますが、ほぼ全開放状態であるような… キーペアとかも勝手に作られているようで、便利なんですが、なんとなくちょっぴり怖かったりします。まあ、慣れたら気にしなくなるんだろうなとは思いますが、後で色々と調べなければいけない事は多そうです。



 続きましてWelcome画面で言う所の「Create a service」に進みます。ここでは「サービス」の定義を行うようです。


 オフィシャルなコンテナに関してはそのまま直接選べるようになっているようです。その他のリポジトリのコンテナも特に問題なく使用出来るようです。



 せっかくですので本ブログの「ConsulのDockerコンテナを作成&公開してみました」の回で作成・紹介しました、consul-serverのコンテナを使用する事にします。





 サービス定義の詳細設定等の画面に進みます。どのノードに展開するか決める為のタグ等もドロップダウンリストに自動的に入っているので楽ちんです。

 



   ポート番号等はDockerfile内でEXPOSEしてあるポートが自動で一覧表示されているようです。ホストノードにマップしたいポートはここで選択しておく必要があるようです。


  Autodeployなんて項目もあります。これはサービスの設定等を更新する必要があるのか、DockerHub上で新しくなったら勝手にやるのか、まだちょっと分かっていません。

 後者だとすると、GithubからDockerHubの自動ビルド連携機能はDockerHubに元からありますので、その流れでデプロイまでしてくれるとなるとなかなか面白そうです。もっとも、自作コンテナ等でバグを混入した場合に無差別絨毯爆撃のように全コンテナをバグだらけにしてくれるのかもしれませんので注意がいりそうですが(=゚ω゚)



 設定的にはまだ続きがあるようで、左下の 「Next: environment variables」を押下して環境変数の設定に入ります。


 定義済みの環境変数に関してはわかりやすく一覧表示されているようで、変更等も見たまんまのイメージで直接変更出来るようです。

 ちなみにconsul-serverコンテナは設定項目を環境変数で行えるようにというコンセプトで作っている為、設定出来る項目に関しては全て事前にENV定義していたりします。おかげ様でこの画面でボタンをポチポチするだけで全設定が行えてしまうようです。どうやら時代を先取りしすぎてしまったようです(=゚ω゚)y-~

※実際はCONSUL_ADVERTISE_ADDRの値を固定的に入れる必要がある等、そのままでは自動化が難しい部分もあります



  とりあえず冗談はさておき、環境変数のCONSUL_DEVをtrueにして単独で動作するdevelモードで起動するように設定しつつ、左下の 「Next: volumes configuration」を押下してボリュームの設定等を行います。

 

  volumeに関してもイメージに定義済みの物は自動で表示されているようです。分かりやすくて楽ちんです。最後に右下の「Create service」を押下してサービス定義の完了です。



 定義されたサービスはこんな感じでサービス一覧に表示されます。




  後は見たまま、サービスの画面でスタートボタンを押せばサービスが起動するようです。
 

  ログとかもちゃんと見れていますね、素晴らしい(=ノ゚ω゚)ノ ベンリ!



  とりあえず今回は初回の使ってみた的な回なのでここまでとしておこうかなと思います。今回の感想としましてはAWSのECSやdocker swarmと比較して、それらよりもかなり便利というか洗練されているような印象を持ちました。第一印象的には最近では珍しい位の好感触度です。

 しかし、このデプロイソフトウェアという分野は罠だらけというか、今まで散々泣いて来た分野なので、実際に使って行けるのかどうか見るにはまだまだ色々調べなければならないかなという所です。 

 とりあえずは今後も定期的にチェックする対象にしておこうかなっと。(=゚ω゚)

2016年2月14日日曜日

Dockerと付き合う為の虎の巻 その01

「Dockerと付き合う為の虎の巻 その01 」です。


 〇 Dockerのバージョンは激しく上がる為、常に最新の情報に気を配る必要がある

 現在のDockerはとにかく激しく更新されます。具体的には以下のようなペースで更新が行われている状態です。

 *v1.10.1 - 2016/02/11
 *v1.10.0 - 2016/02/04
 *v1.9.1   - 2015/11/21
 *v1.9.0   - 2015/11/04
 *v1.8.3   - 2015/10/13
 *v1.8.2   - 2015/09/11
 *v1.8.1   - 2015/08/13
 *v1.8.0   - 2015/08/12
 *v1.7.1   - 2015/07/15
 *v1.7.0   - 2015/06/19

 0.1単位のバージョンアップだけ抜き出しても以下のような感じになります。

 *v1.10.0 - 2016/02/04
 *v1.9.0   - 2015/11/04
 *v1.8.0   - 2015/08/12
 *v1.7.0   - 2015/06/19

 大体2ヶ月~3ヶ月に一度0.1単位でバージョンが上がっています。そしてそれなりに大きな機能追加や変更等が実際に行われているようでして、昨日出来なかった事が今日はもう出来るようになっているなんて事は日常茶飯事のようです。(逆に昨日までの常識が今日にはLegacyとして扱われたりする事もあります)

 好意的に解釈すれば、今かなり力を入れている時期であり、最新の傾向や、需要のあるものがどんどん取り入れらて行く状態にあるとも言えます。過去にDockerを使用して「アレ?これダメじゃない?」となった方も、現状では問題無い可能性があるとも言えますので、もう一度見直してみる事をお勧めします。 

 否定的に解釈するならば、こんなにバージョンアップが激しいと本番では使い辛いといった側面を持っています。なお、Dockerの場合、ver1.9系 ver1.10系等と系統付けて並行して更新されるような事は基本的にないようで、v1.9 → v1.10 となった時点からv1.9等過去のバージョンは更新せずに捨てられていると思って良さそうです。機能追加等だけであれば「ver1.9系を採用して使用して行く」等の運用的な方針でどうにかなる事もあるかと思われるのですが、それも難しいのかもしれません。

 ここはそういうものだと割り切って付き合って行くしかないかもしれません。しかし、ver1.9辺りからそうもいかない事情も少し出てきてしまいました。(次項にて触れます)



〇Dockerは使用するOSを選定する必要がある

 ここでは主にLinux系だけ見てみます。Linux系のOSとしてはDebian、Ubuntu(Debian系)、CentOS(RHEL系)、CoreOS他、各種選択肢があるのですが、実際の所いくつかの大きな違いが出るポイントが存在しており、特にファイルシステムカーネルバージョンについては気を配る必要がありそうです。

 単刀直入に言うと、Ver1.9.0以降に取り入れられた機能のうち、overlayネットワークはカーネルバージョン3.16以上を要求し、overlayfsストレージではカーネルバージョン3.18以上(既知問題あり)が必要という事になっています。

 この二つのoverlay機能はDocker環境をかなり大きく改善する可能性を秘めた機能追加なのですが、残念ながらカーネルのバージョンをあまり上げてこないRHEL系ではカーネルとして3.10系を使用している為、動作可能と言えるかどうかに疑問が残るという状態にあります。

 実際にCentOS等でyum(EPELですが)でdockerを入れる場合、大体docker公式の最新バージョンより1ヶ月~2ヶ月位遅れ程度で(0.1バージョン遅れで?)投入されているという、RHEL系としては(EPELなのでFedoraかもですが)なかなか挑戦的なバージョン更新がおこなわれていたのですが、ちょうどカーネルがおいつかなくなった、Dockerのver1.9系以上のバージョンについては投入されなくなってしまいました。仮にRHEL8の投入迄はカーネルのバージョンが変わらないとするならば、DockerのバージョンにおいてもRHEL8の投入迄は現状のver1.8系で維持の可能性があります

 つまり、Dockerを最新の環境で使用したい場合は、RHEL系が選択肢から外れるという事になります。ただし、Dockerのver1.9系の投入自体が比較的最近の出来事ですので、RHEL系陣営がなにかしらの手を打つ可能性もありますので、現状ではどのようになるかは分かりません。

 なお、AWS上に存在するAmazonLinuxの場合、RHEL系の一種とも言えるのですが、こちらはカーネルのバージョンは既に4系となっており、yumで入るdockerもver1.9系となっておりますので、AWS上で稼働させる場合はAmazonLinuxを使うというのも手かと考えられます。



〇Dockerで使用するファイルシステムを選定する必要がある

 Dockerはコンテナのイメージや、起動したコンテナが使用するストレー ジの領域等で、データの差分管理のような事を行っています。この差分管理に起因するものなのか、Dockerでストレージを使用するような操作(起動、イメージのpull、イメージの削除etc...)を行う際には非常に動作が重くなり処理に時間がかかり過ぎてタイムアウトを起こしてしまったりする他、Dockerそのものが不調になる事もあるようです。 (「アレ?これダメじゃない?」となってDockerを早めに見限った人の理由のNo.1がコレと予想)

 この現象は主にデフォルトで使用されるストレージ関連の機構であるDevicemapperに大きく起因しているようですので、まず最初にストレージ関連の整備を検討した方が良さそうです。具体的にはbtrfs、overlayfs、aufs 等を使用する事によりこれらの症状は劇的に改善する可能性があります。

 ただし、前項でありましたように、overlayfsはRHEL系ではカーネルのバージョンが足りていませんし、実質ext4以外のファイルシステムと組み合わせてoverlayfsを使用する事が出来ない等のクセがあります。また、overlayfsはストレージ関連で一番新しい取り組みの部分ですので信頼性について若干疑問が残っている等の問題もあます。

 aufsはそもそもRHEL系ではまともに使用されている例が無いのでRHEL以外の環境に限定されるかと考えられます。(※普段RHEL系がメインな事もあり、あまり確認出来ていませんです)

 btrfsもどちらかというと新しい仕組みであり、RHEL7等でもテクノロジープレビューとの位置付けにあるようです。ただし、個人的な使用感的には快適に動作していますので、状況次第でベターな選択肢となりえるかもしれません。(データディレクトリの削除を行う等btrfs領域を直接触る際にはbtrfs的サブボリュームの取り扱い方法等を知っておく必要はあります)

 「あれ?結局現状で使えるまともなファイルシステムの選択肢ってないの?」と思ったかもしれません。そのような場合の為にオープンソース的な空気とかを読みつつ華麗に身をかわす訓練等をしておく事が重要かもしれません。(=゚ω゚) …

dockerと付き合う為の虎の巻 その00

 さてはて、現在巷ではDockerが大変話題になっておりますが、皆さんDocker使ってますでしょうか?

 実際にDockerを使ってみると、結構色々なと部分で「アレ?これダメじゃない?」とかなる事も多いような気がしています。しかし、色々調べると、それらはDocker特有のクセのようなものでして、その辺りを分からないまま使うと色々とハマってしまうというのが正確な所のようです。簡単に言えば「Dockerの流儀のようなものがあらかじめ存在」していて、「そこから外れた用法をすると一気にハマる」といった印象を持っています。

 しかし、既にDockerが話題になり始めてから結構な時間が経過しておりますし、色々とDockerについて紹介しているブログ等の情報も豊富になって来ておりますので、そろそろ要点をまとめてシリーズ化出来ないかなという事で、何回かに分けてまとめて行けたらなと考えています。

 題して「Dockerと付き合う為の虎の巻」です。なんだか表現が偉そうなのはブログ的な盛りの事情なのであまり気にしないでください。(=゚ω゚) キニシナイ

 では次回以降からちょっとづつ虎の巻を書いていってみようかなと思いますのでツッコミとかあればよろしくお願いいたします。


2016年2月12日金曜日

ConsulのDockerコンテナを作成&公開してみました

 前回の「consulを頑張って理解する」のスライドの最後の方に記載があるのですが、ConsulのDockerコンテナを作成して公開しております。

 内容的には起動時の引数指定を環境変数から行えるようにしただけのものなのですが、ConsulはGo言語性の単一バイナリで動くHashiCorp社のソフトウェアですので、あんまり複雑な事をするよりも、出来るだけ簡潔にした方が良いかなという目論見で特別何もしないコンセプトで作成してみました。

DockerHub
https://hub.docker.com/r/masakazuwatanabe/consul/
https://hub.docker.com/r/masakazuwatanabe/consul-client/
https://hub.docker.com/r/masakazuwatanabe/consul-server/

GitHub
https://github.com/masakazuwatanabe/consul

 ちなみに、ベースとなるOSとしてはCentOS7CentOS6/Alpineと三つ分作成してタグ分けしてありますがデフォルトのOSはCentOS7となっております。最近の海外のDocker界隈の流行的にはAlpineを使うのがデファクトスタンダードであるような気もしていますが、実運用的にはCentOSの方が扱いやすくて良いかと思いましてそのようにしてみました。(=゚ω゚) タブン

もし良かったら使ってみてやってくださいなっと!

「Consulを頑張って理解する」 を公開してみました(ノ=゚ω゚)ノ

 ブログリニューアル企画的な一貫として「Consulを頑張って理解する」を公開してみました。(ノ=゚ω゚)ノ



Consulを頑張って理解する from 雅和 渡邉


 最近docker関係を中心に触っておりまして、その流れでconsulというソフトウェアを触っていたりします。

 dockerはとても面白い仕組みなのですが、現在の所それ単独では単一OS上で使う機能しかなく、(ver1.9.0辺りからOverlayネットワーク等にも対応して来ていますが)、複数サーバをリンクさせて動作させたりとか、クラスタリング構成にしたりするとか、そのような事をする場合は別途そのような機能を持ったソフトウェアと組み合わせて使用しなければならないのが現状であったりします。

 そのような状況にこれ幸いと(?)最近名乗りを上げて活発に活動しているのがHashiCorp社のconsulというソフトウェアです。consulを使えばどんな時でもAnything OK! とは行きませんが、色々と仕組みに工夫がなされていてdockerと組み合わせて使うと面白いなと思いました。


 まあ、折角ですので詳しくはスライドの方を見ていただければなと思います。内容的には主に導入部分の説明となっておりますので、これからconsulを使ってみようという方にオススメです。

 機会があれば実践編というか詳細編というか隠していたconsulの罠とかを説明する回も作って行けたらなと思いますので、期待しないでお待ちくださいな。(=゚ω゚) ガンバリマス