二度忘れた事を三度忘れないようにする

技術的なことから趣味のことまで

Docker + Rancher + Portainer 開発環境構築編

前回で初期設定が完了したので、それっぽい開発環境を作っていきます。
Docker + Rancher + Portainer 導入〜初期設定編 - 二度忘れた事を三度忘れないようにする

1.Rancherにアクセスし「Add Stack」を押してStackを作成する。 (今回はデフォルトの環境を利用
f:id:knhko:20170730165608p:plain
ここで、オプションで普段利用しているdocker composeファイルを指定したり、Rancher用のcomposerファイルを作成して指定することが出来ます。

2.作成したStackに「Add Service」を押してServiceを登録する。
f:id:knhko:20170730171126p:plain
1つ目のブロックでコンテナをいくつ起動するかをここで設定できますが、今回は開発用なので1つにします。
Side Kick Containerというものがありますが、今回は利用しません。というか詳細を理解出来てません。。。恐らくメインとなるサービスに対して依存関係のあるモノ(DB等)を関連付けて一緒に動かすモノだと思うのですが。。。
2つ目のブロックでサービスの名前、説明、利用イメージを指定します。「Port Map」でホストOSで待ち受けるポートとコンテナで待ち受けるポートのマッピングを行えます。「Service Links」は既に作成しているサービスにアクセスする際はここで指定します。

f:id:knhko:20170730173816p:plain
次にDockerの詳細設定が出来るので必要に応じて入力します。コンソールの種類もココで設定出来るので、開発では便利なオプション「-i -t」を指定します。

f:id:knhko:20170730180700p:plain
Volumesタブの「Volumes」でホストOSのディレクトリをコンテナから参照出来る様にします。例のとおり「ホストのボリュームまたはディレクトリパス:コンテナのマウントポイント:権限」という順番で記述します。

他にもIPアドレスドメイン、セキュリティ、CPU・メモリリソースのリミット等をGUIで簡単に設定できます。
なお、通常のdockerコマンドと同様にコンテナを作成するとコンテナ数、名前、ServiceLinksしか変更出来なくなります。

3.起動したコンテナの整備をする。
色々な手法で構築済みコンテナを準備出来ます。今回はRancherのWebコンソールを使ってnginxとphp-fpmを入れました。
f:id:knhko:20170730191200p:plain

4.同様の手順でMySQLのコンテナを準備する。
明示的に設定していなければ同じStack内のサービスであればServiceLinkすることなく疎通可能なはず。。。設定しておくとStackトップページでLink図が綺麗になるくらい、なはず。。。

5.LBを作成する。 Stackトップページの「Add Service」右にある記号をクリックすると、Service以外も作成出来るので、LBを作成します。
f:id:knhko:20170730192606p:plain
ぱっと見ただけでもAWSのELB/ALBと同等からそれ以上のLBを導入出来るのがわかりますね。
1つ目のブロックはLBもコンテナベースで動くようなのでサービス同様コンテナの数を指定出来ます。
2つ目のブロックはLBの振り分けルールを一括で設定する箇所になります。

Access - Dockerクラスタ外部から通信を受け付ける場合はPublic、それ以外はInternalで良いはず。
Protocol - HTTP/S,SNI,TCP,TLSと幅広く対応しており、選択プロトコルによって以降の選択項目が変化します。今回はHTTP/Sで進めます。
Request Host - ドメインレベルの分散ルールが書けるのです。AWSにはない地味だけど便利な機能です。これを使うとローカル開発環境ではすごく助かったりします。
Port, Path - 待ち受けポートとリクエストパスで、この辺はAWSのソレと変わりないかと思います。
Service - 分散先をService単位で設定します。AWSでいうTargetGroupかな。
Port - Serviceで待ち受けているポートを指定します。これは各コンテナで待ち受けているポートで良いのでWebサーバであれば80,443となります。
※Selector Ruleは未検証なのでどういったものか詳しい方教えてください。。。

3つ目のブロックでSSLやStickyの設定、haproxyのコンフィグを直接書くといったことが出来ます。

6.完成。のはず

以上、アプリ周りは端折りましたが、ローカル開発環境レベルであれば実用に耐えられるかと思います。