AWSのプロダクトでDocker
にパッケージ化されたElixirをデプロイします。 これは私の好みのやり方でしたが、今はすべてのプレインストールされたPackerを使って自分のAMIを作成する傾向があります。
デプロイメントの中心的な問題は、Dockerを活用する際にある程度、私が感じるコントロールの問題です。
Dockerの主な欠点は、epmd
を超えるノード間接続など、Erlang/Elixirの機能を制限することです。これはまた、remsh
が実質的に問題にならないことを意味し、涼しい:observer.start
はノーではありません。何らかの理由でプロダクションノードとやりとりする必要がある場合は、Dockerなどに入って最初にサーバに入るという余分な障壁があります。何かをチェックしているときにうまくいくと、プロダクションが燃えているときにイライラします苦しんでいる。 Beamがすべてのコアを効率的に使用するので、1つのノードで複数のコンテナを起動するのは無用です。ホットアップグレードは実質的に問題にはなりませんが、それは本当に私たち自身が本質的なビジネスニーズを持っているというわけではありません。
のようにコンテナの設定内でepmd
の作業をしようとしましたが、カスタムnet_kernel
用にErlangを再構築する必要があります。
Amazonは最近AWS ECSに新しい機能をリリースしました。AWS VPC Networking Modeは、コンテナ間の通信を容易にし、ノードに直接接続する可能性があります。私はそれをまだ検証していない。
さらに、epmd
の問題は、展開時間の問題です。 Dockerでイメージを作成すると、イメージが5MBしかないのに、すぐに300MBが必要になります。リリースの作成には、さまざまな依存関係の200MBが必要です。それを減らす方法があるかもしれませんが、それには専門的な知識と献身的な努力が必要です。私はこの余分なスペースをディール・ブレーカーではなく迷惑だと思っていますが、あなたの不変の配置が完了するまでに25分待たなければならないと考えています。
パフォーマンス上の理由から、ベアメタルの展開とドッキングの展開の間には大きな違いはありませんでした。 AWS EB Dockerは、コンテナリソースをEC2インスタンスのリソースにうまく展開します。
もちろん、移植性の利点があります。フロントエンドエンジニアがJSON APIをヒットする必要がある場合は、ローカル開発の点では、Erlang/Elixirについて知ることなく、ローカルで最新のAPIを起動できるように、/Rserve/Postgres。
また、ベンダーロックインが大幅AWSは、あなたが生産を取得する必要があり、開発者であり、非常に少ないDevOpsチームを持っている場合、これは、トレードオフの問題であるKubernetes
のための彼らのサポートを開始しました、特に以来、減少していますおそらくDockerの配備が保証されている可能性があります。インフラストラクチャ、デプロイメントなどに慣れている場合は、開発者として自分自身のAMIを作成することで、環境をより詳細に制御できると信じています。 私は少なくとも、Docker
で遊んでみて、それを試してみることをお勧めします。新しい可能性が開かれるかもしれません。
実際。 Dockerを使用することはErlangランタイムでは冗長であり、何も得られずに複雑になり、配備されたランタイムと通信するプロセスを難読化し、微妙に物を壊すような厄介な方法があります。どの店舗でもこれを行う唯一の理由は、Docker以外の方法で*その他の方法を配備する方法を知らないためです。これは、実際にはあらゆる操作セクションの非常に悲しい告発です - しかし、多くのdevs/devopsグループが今日対処している状況です。 – zxq9
TL/DRでは、生産のためにドッカーでerlangを使用しないでください。しかし、デモ(または開発キット)を配布するのが簡単なのであれば、是非ドッカーを使用してください。 – Jonke