開発者がDockerを気にする必要があるのはなぜですか?


11

一般に、開発者はビジネス要件を満たすことに関心があります。彼/彼女は特定のスタックまたはフレームワークの専門知識を持っているかもしれません。しかし、彼/彼女はdockerとそれがさまざまな配備方法(swarm、kube、mesosなど)を学ぶように努力すべきでしょうか?

簡単に言えば、開発者がdockerを気にする必要があるのはなぜですか?

PS:この投稿の親の質問は、開発チームにdockerを導入することの影響です

回答:


7

おそらくあなたが探している答えではありませんが、それでも答えは:)

Dockerとその展開方法について学ぶことは、コード言語、バージョン管理システム、コンパイラ、テストインフラストラクチャなどと同様に、プロジェクトまたはチーム開発環境の一部にすることで、実際にビジネス要件に含めることができ、そのチームまたはそのプロジェクトでは、これらのすべてについて知って使用する必要があるため、(ほとんどの場合)「自分で作成」することはできません。

「開発者」が実際に開発チームの過半数または全体を意味する場合、状況は少し複雑になります。実際にツールをサポートする開発者がいない状態でツールを開発環境にプッシュすることは、本当に難しいでしょう。時間をかけて、まずチームの技術的リーダーシップからそのようなサポーターを1人作成します。

補足:チームのすべての開発者がDockerエキスパートになる必要ありません。簡単なチートシート対応コマンドにラップされた事前に確立された使用法のレシピにより、開発者は多くの場合、特に大規模なチームでは、内部の仕組みについてあまり知らなくても、Dockerベースのソリューションを使用できます。最終製品の構築方法に関する詳細をすべて知らなくてもコードを提供できるように。


さらに、必要なテクノロジーをベースに構築できるため、システム管理者がさまざまなテクノロジーをサポートするための制限が少なく、頭痛の種が少なくなります。そして、「開発者」がテクノロジーを決定するので、Docker環境を構成するのは彼次第です。
DarkMukke 2017

@DarkMukke「開発者」が常にテクノロジを決定するわけではありません...大規模な開発チームでは、まったく逆のことがしばしば当てはまります。「開発者」は、チームが使用するテクノロジを使用します。例外、チームの活動を妨害したり、チームの活動に悪影響を与えたりしない限り、許容される可能性あります。
Dan Cornilescu 2017

部分的には同意しますが、大規模な(200以上の)開発会社が私が説明した方法でDockerを使用するのを見てきました。開発チームだけでなく、その上の管理スタッフの個人的な選択の問題だと思います。まともな開発者がいる場合、開発者が必要とするドッカーの量は通常は取るに足らないものです。
DarkMukke 2017

6

私の視点をお伝えします。他の開発者がdockerを使用する意思があり、すでに専門家を構築しているため、開発者はdockerに注意する必要があります。彼らは、開発者としてDevOpsエンジニアの役割を喜んで引き受けます。したがって、DevOpsのOps部分は、現在専門家が構築しているものです。

最近では、この完全なパッケージを単独で監視して本番環境に導入するために、テストの開発、オーケストレーション、自動化、ジョブの自動化、ツールの構築を行える人がますます増えています。これらは、開発者コミュニティの間でdockerやその他のツールを推進している人たちです。

また、市場の流れは、仮想化、自動スケーリング、自動化、機械学習、Dockerのこれらすべてへの適合に向かっています。Dockerを使用することが非常に必須になりました。企業は、これらすべての責任を負う1人の男に2倍の費用を支払う用意があります。そのような男の需要があると、供給も開始されます。これは従業員と雇用者の観点からです。

技術的には、私が働いた組織では、開発チームとDevOpsチームが別々にいますが、彼らはデリバリーに非常に密接に協力しています。DevOpsのエンジニアと開発者は、ここでスキルセットの大部分を共有しているため、職務の交渉が時折行われます。

開発者ができる最低限のことは、自分のバイナリを共有することですが、Dockerコンテナー内で実行するためにバイナリが使用されることと、Dockerの動作を理解する必要があることを理解する必要があります。kubes、swarms、mesosなどの場合、開発者は何が使用されているかを気にすることさえないかもしれませんが、Dockerの基本は開発者に非常によく理解されているはずです。マイクロサービス。アプリケーションがその考え方(Dockerの基本を必要とする)から構築されている場合、DevOpsエンジニアはそれをそこから取り上げ、自動スケーリング、オーケストレーション、テスト、デプロイ、監視を行うことができます。

また、ほとんどの場合、1つのサイズですべての種類のものが収まることはありません。開発者はDockerフレンドリーなアプリの構築方法を明確に知らず、DevOpsエンジニアはアプリ構築プロセスの内部をまったく正しく知りません。したがって、ほとんどの場合、組織はこれらの両方のタスクを同じ人に与えてスピードアップします。個別のものがある場合、アプリをより未来的でdocker / cloud / scalingに対応させるために、DevOpsチームから開発チームへの継続的なフィードバックメカニズムが必要です。


5

Dockerやその他のコンテナー化テクノロジーについてではありません。

Docker、rktなどのコンテナーは、静的バイナリーと同様の方法でアプリケーションを配信するための単なる方法です。内部に必要なすべてが含まれ、エンドユーザーがランタイム以外何も必要としない配置を構築しています。

これらのソリューションはJavaのファットJARに似ており、(理論的には)必要なものはすべてランタイム(JRE)がプリインストールされ、すべてがJust Works™です。


開発者が理解する必要がある理由(そのようなツールの操作方法を学ぶ必要はなく、なぜこれが必要なのかを理解するだけです)オーケストレーションツールを使用すると、「従来の」デプロイメントに比べていくつかの利点が得られます。

ペットではなく牛

EngineYardはそれについて良い記事を書いています。つまり、サーバーが停止した場合は、肩をすくめて新しいものが表示されるのを待ちます。あなたはそれらを牛として扱い、何十、何百、何千ものそれらを走らせており、人が落ちたとき、あなたもあなたのクライアントもそのことに気付くべきではありません。

オーケストレーションツールは、クラスター内のすべてのアプリケーション(ポッド/ジョブなど)のステータスを監視することでそれを実現し、サーバーの1つが応答を停止(停止)すると、そのサーバーで実行されていたすべてのアプリケーションを別の場所に自動的に移動します。

リソース使用率の向上

オーケストレーションのおかげで、1つのサーバーで複数のアプリケーションを実行でき、オーケストレーターがリソースを追跡します。必要に応じてアプリケーションを再配置します。

不変のインフラストラクチャ

オーケストレーターの自動フェイルオーバー処理のおかげで、カスタムイメージをそのままクラウドで実行できます。更新が必要な場合は、新しいイメージをビルドし、起動構成を設定して、そのイメージをすぐに使用してロールするだけです。すべてがあなたのために処理されます:

  1. 新しい構成で新しいサーバーを作成します。
  2. 実行中のサーバーを1つ強制終了します。
  3. オーケストレーターはすべてを他のマシン(新しいマシンを含む)に移動します。
  4. 古いサーバーが残っている場合は、1に進みます。

シンプルな操作

  • 不十分な資源?新しいマシンをクラスターに追加します。
  • さらにアプリケーションインスタンスが必要ですか?数を増やして続行します。
  • モニタリング?できました。
  • ログ管理?できました。
  • 秘密?何だと思う。

TL; DR要点はDockerではなく、オーケストレーションです。Dockerは、適切なオーケストレーションに必要なtarball / fat JARの拡張バージョンです。


さて、それが私が求めていることであり、それが全体の質問についてです。開発者は、より優れたリソース利用、不変のインフラストラクチャ、よりシンプルな操作に関心を持つべきでしょうか?...私は、より優れたリソース利用につながるビジネス要件とコード最適化の提供に焦点を当てるべきだと私は信じています。それがひどく/平均的に書かれたコードであるなら、dockerでさえもより良い利用に役立ちません。ビジネス要件により、開発者は物事をより速く提供できるという事実を受け入れましょう。そしてこれを行うことで、コードを最適化する時間がなくなります。なぜドッカーの責任をそれらに追加するのですか?
Abhay Pai

問題は、テストから実装、そして最終的には展開までのスタック全体の概要を把握することで、ソフトウェアの使用方法、エッジケース、クラッシュの状況を確認できることです。それはあなたが書くLOCであなたを遅くしますが、それらの品質を大幅に改善します。長期的には節約時間
モリッツ

4

たとえば、2014年に発行され、回答に完全に一致するようにタイトルが付けられたブログ投稿のいくつかの引数を次に示します。

  • 環境への新しいテクノロジーのはるかに柔軟な導入
  • テストされた最終的なコードをコミットしてから、最終的な本番サーバーで実行するまでには、依然として大きな問題があります。Dockerはこの最後のステップを大幅に簡素化します
  • Dockerは、実行しているLinuxの種類に関係なく、レガシーOSを維持することを簡単にします

送信元:https : //thenewstack.io/why-you-should-care-about-docker/


新しい技術の注入に同意します。しかし、それにもいくつかの問題があります。データベースにDockerを使用するように(percona.com/blog/2016/11/16/is-docker-for-your-database)。現時点では安定しておらず、おそらく将来的には安定するでしょう。のが最善の結果を期待してみましょう。いずれにしても、CI / CDを使用することで、テスト済みコードをプロダクションにプッシュできます。では、なぜdockerなのか?開発者は、私たちが実行しているOSを気にしません。なぜ彼らはそもそもDockerの学習に悩む必要があるのですか?開発をより簡単にするために?
Abhay Pai 2017

まず第一に、私は次の "MVP"シナリオについて考えます:devは、インフラストラクチャコンポーネントとしての環境用の新しい構成/ツールを試します(imagemagickなど)。Dockerがないと、この情報は失われたり忘れられたりする可能性があります。Dockerfileを共有することは、マシンで検証可能な実際のセットアップであり、Dockerフリーのインフラストラクチャへのセットアップをハンドクラフトするために使用される場合でも、単なるドキュメントよりも価値があります。確かにあなたも人形に行くかもしれません。Dockerの良い点は、自己完結型のシナリオを可能にする方法がIMHOであることです。
Peter Muryshkin 2017

同意した。しかし、問題はオーケストレーション中に発生します。開発者は、ベストプラクティスに準拠し、ビジネス要件を提供するために、Dockerオーケストレーションの専門知識を持っている必要があります。開発者がサービスとしてimagemagickを必要とするシナリオを考えてみましょう。これで、dockerfileを構築しているときに、dockerイメージにインストールできるパッケージを完全に制御できるようになります。Dockerログを使用する代わりにsshdをインストールしてdockerにsshをインストールするとどうなりますか?ビジネスロジックとは何の関係もないがセキュリティを危険にさらすツールをインストールするとどうなりますか?開発者にはドッカーの専門知識が必要ですか?
Abhay Pai 2017

ええと、ソケットベースのバックドアを実装した場合はどうなりますか?dockerはエンタープライズファイアウォールに取って代わるものではないと思います
Peter Muryshkin

そうだね。しかし、それはいずれにしても開発者の悪意です。ドッカーかドッカーなしか。しかし、Dockerが開発者に導入されると、適切な知識がないために事故が発生する可能性があります。事故や合併症を引き起こす可能性があるのに、なぜ彼らはドッカーを学ぶのに煩わしいのでしょうか(オーケストレーターも複雑さを増すと考えています)。私の質問を気にしないでください。私も港湾労働者が大好きです。しかし、私は開発者の視点を理解しようとしています。私は過去3年間自分で開発者として働いており、現在はDevOpsエンジニアです。
Abhay Pai 2017

4

Dockerコンテナーでプロダクションを実行している場合、それらのコンテナーは、アプリを実行している同じ開発者によって作成されていることが重要です。他に誰がどの外部依存関係が必要であるかなどを知るのにより良い場所です...?

また、CDのどの段階でもパイプラインが失敗する可能性があります。特に、Dockerイメージのビルド手順の場合は、ファイルが見つからないか、必要なライブラリである場合があります。

仕事では、すべての開発者をdockerに紹介し、アプリを提供するためにdockerfileを構築するための基本を説明しました。また、パイプラインを簡単にして、名前とdockerfileを追加するだけで、アプリが自動的にビルドされるようにしましたそれを実行している技術に関係なく、次のプッシュ。

Dockerクイックスタートは、devOpsチームが開発者にディストリビューションの選択を指導した後(その多くはのようなことを知らないalpine)、実際にそうするための素晴らしい導入です。

私たちの仕事は、ツールに簡単にアクセスできるようにすることです。残りの作業は、何か問題が発生したときに修正できるようにするためです。Dockerは実際には開発プロセスの一部であり、devOpsチームは私たちのニーズに一致する十分に簡単なDockerイメージを提供しているため、新しいアプリを作成して支援なしでデプロイするのに数分しかかかりません。


開発者によると、プロジェクトでのdockerの使用は、プロジェクトが外部依存関係を要求する場合にのみ取り上げるべきですか?私たちは開発者にそれを適用したか、クールだと思うので、ドッカーは私たちの開発プロセスの一部になったと思います。また、オーケストレーション中に問題が発生します。スウォーム、kubernetes、mesosなどのオーケストレーターを学ぶ必要がありますか?これらすべてのオーケストレーションの実装は異なります。不適切な実装が原因でオーケストレーションがクラッシュした場合はどうなりますか?誰が非難されるのですか?PS:私の質問を気にしないでください。私はただdevliの支持者を演じています。私もdockerが大好きです:)
Abhay Pai

2

Dockerはプレスやブログで多くの言及を受けているため、開発者はDockerの使用に興味を持っています。一部の人々にとっては、それは新しいテクノロジーで遊んだり、物事がどのように機能するかを理解することに関心があります。他の人にとっては、履歴書にキーワードを追加することを望んでいます。どちらの方法でも、物事がどのように機能し、どのように展開されるかについて、より多くの開発者が知っているほど、後で驚くことはありません。私が見たところから、これには既存の関心がかなりの量であるので、それをさらに奨励することはそれほど難しくありません。


0

まあ、テストにVMを使用したことがある場合は、コンテナとdockerを使用してみてください。実際には、テストに最適であり、LXCの代わりに使用する方がはるかに簡単です。


同意した。私はdockerやさまざまなオーケストレーションツールの使用に反対していません。私も大好きです。私が理解しようとしていることは簡単です。アプリケーションのコンテナ化の所有者。開発者?またはDevOps?または両方 ?両方の場合、それぞれがどれだけ貢献する必要がありますか?dockerまたはdocker orchestrationが原因で問題が発生した場合、誰が責任を負うべきですか?コード効率と開発を支援して開発を容易にします。私の質問は、テクノロジー自体ではなく、個人の役割に傾倒しています。
Abhay Pai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.