2017-05-10 18 views
2

私はDockerにとって非常に新しいです。私たちのチームは、JenkisとTeamCityを含むさまざまなプロジェクトに異なるCIエンジンを持っている非常に素敵な導入ラインナップを持っています。ドッカー - チームにとって本当の価値は何ですか?

通常、開発者はチェックインし、CIが引き継ぎ、展開し、テストチームがテストするための完全な準備ができています。私はいつもこれを完璧なモデルと考えていました。もちろん、一部の部品や実装には欠陥がありますが、私たちが望むものに対してはうまく機能しました。

私たちのDev-Opsは、テストチームがDocker RegistryからDockerイメージを取得するDockerを導入しています。毎回、チームシティからビルドを実行します。私はまだそれの利点を理解することに失敗している、本当に素晴らしいと思うが、

私の研究の後、私の結論は、ドッカーはVMのための良い軽量代替品になることができたということでした。しかし、それはあなたがどんなVMsを使用している場合だけですか?私たちはVMSを使用していませんか?私はちょうどここに本当の価値は何かを理解していないのですか?あなたのアプリが行く必要があるたび

使用ドッカー:彼らはあなたがドッカーを使用する必要がありますし、ポイントの一つは、と言う時に話し合う

https://www.ctl.io/developers/blog/post/what-is-docker-and-when-to-use-it/

:また、検索中に私はドッカー上の比較的良好なリンクを見つけました開発の複数の段階(dev/test/qa/prod、DroneまたはShippable、ともにDocker CI/CDをお試しください)

私のアプリが複数の段階を経なければならないときに、ドッカーがなぜ有用であるかを詳しく説明しないでください。

既存のセットアップがすでにスムーズに行われている場合、どのように定期的にDev/Testを設定すると非常に便利ですか?

答えて

2

まず、VMと似ている点で、VMと比較するのは正しいことです。しかし、ドッカーは信じられないほど軽量です。このプロパティは、最初は私を最も驚かせたものです。仮想マシンとは対照的に、コンテナはリソースをより効率的に共有します。仮想マシンは隔離されています。コンテナは、わずかなオーバーヘッドでホストマシン上で同時に実行できます。コンテナが(ボリュームまたはポートバインディングを介して)お互いに会話できるように設定できます。

さらに、私のチームでは、ドッキングウィンドウには、次のような利点をもたらします:

  • 我々のアプリケーションは、一つの大きなアプリケーションや他のいくつかのいくつかのmicroservicesで構成されています。しかし、アプリケーション間で相互依存関係のあるパッケージをすべて1つのパッケージとしてリリースしたいと考えています。これにより、アプリケーションとマイクロサービスのバージョンを一緒に配備する(互換性)などの問題を解決できます。 docker-composeを使用して、すべてのアプリケーションを1つずつアップ/ダウンすることができます。あなたは展開する必要はありません、あなたは単にイメージを引っ張り、コンテナを発射します。マイクロサービスの1つを停止したい場合は、他のサービスに影響を与えることなく行うことができます。

  • チームの開発者は、ローカルマシン上で非常に同じイメージを実行できます。たとえば、プロダクションで発生した問題をトラブルシューティングします。これは、トラブルシューティングが本番環境と同じ環境で実行できることを意味します。これは環境の標準化をもたらし、もはや「機械上で動作する」という話はしません。

  • 私たちがもたらすもう1つの利点は、ドッキング・イメージを作成してテストを実行し、これらの段階がすべて成功した後にレジストリにプッシュすることです。これは大きな移植性につながります。

  • コンテナーをバージョン管理する機能。現在のバージョンと以前のバージョンの間でコンテナを簡単に検査できます。ロールバックしたい場合 - それはスムーズに行われます。

  • アプリケーションの分離と保護。すべてのコンテナは隔離されており、出入りするものを簡単に制御できます。

1

私がこのアイデアに慣れてから1年もかかりましたが、今は十分に単純なようです。

私は、人々がDockerを「仮想マシン」と呼ぶのは正確ではないという事実から来ていると思います。これは本当にシーンの裏で何が起きているかのニックネームです。多くの点で、DockerはVMWareなどの完全な仮想化ソリューションを置き換えることはありません。しかし、それはインフラストラクチャについての新しい考え方を生み出します。多くの人が頭を包み込むのに苦労している人がいます。

あなたは自分自身に尋ねることができます。

カーネル以外のものは、バイナリ、ライブラリ、実行時および構成ファイルを整理するための "標準的な方法"に過ぎません。/binにバイナリ、/ libにあなたのライブラリ、/ etcにあなたの設定が必要です。ユーザーインストールは/ usrの下に置かれます。

ほとんどのディストリビューションは、UNIX構造のメイン構造を維持し、独自の特徴を追加します。それぞれには、パッケージを管理し、配布する独自の方法があります。それぞれライブラリ、ドライバなどの独自のバージョンを維持します。

重要なのはカーネルです。それは彼らが共通して持っているものです。今日、Linuxカーネルの最近のビルドは、利用可能なすべての主要なディストリビューションと互換性があります。したがって、/ bootを除いて、他のほとんどのものは、適切な権限を持つ正しい場所に適切なファイルを置いておくだけの問題です。

ここで、すべての配布バンドル(カーネルを除く)を取り出し、実行中のOSの別のディレクトリに配置するとします。すでに実行しているのと同じカーネルを利用して、新しいプロセスを分離して、それがそのディレクトリであると「考える」ようにします。ビンゴ!このプロセスは現在、別のオペレーティングシステム上でそれ自身ですべて実行されていると「考える」。

DockerはLinux Containersの上に構築されています。これにより、私たちはそれほど楽観的ではなく、よりやさしく簡単な方法で行うことができます。仮想マシンとは考えないでください。プロセス分離と考えることができます。実行中のカーネルは、システムの残りの部分から独立した状態に保ちながら、このプロセスとマシンのリソースを共有します。ステロイドの場合はjailsのようです。

これは広く簡略化されています。しかし、コンセプトを考えれば、このアイデアの意味を考えてみてください。

完全に異なる環境で複数のプロセスが競合する可能性がある複数のプロセスを同じホスト上に持つことができます。古いライブラリを必要とするレガシーバイナリ(死んではいけないレガシーシステム)があります。もう一つは、最新の先端技術の最新のビルドであるかもしれません。同じカーネルを共有することは、効率的で貴重なリソース管理です。

私が見つけた最も価値は、インフラストラクチャの管理にあります。 Dockerをホストにインストールし、swarmを設定し、コンテナをデプロイする方法を定義したら、主にホストについて忘れてしまいます。ユーザーの追加、パッケージのインストール、カスタマイズ、設定ファイルの編集...デスクトップ上での開発作業となるものすべて。より多くをスクリプト化し、より多くを自動化するインセンティブがあります。絶対に必要な場合を除き、物理マシンまたは仮想マシンから手を離します。

誰かが気まぐれなアプリケーションの動作を回避するためにサーバーの設定を変更して、誰にも知らせずに休暇を取った日もありません。環境への変更は、チームの全員がバージョン管理、追跡、改善することができます。データセンターが災害を起こした場合、環境全体を再作成することは、イメージの再構築とコンテナの再デプロイメントの問題です。インフラストラクチャーの一貫性と再現性が向上し、幅広いオペレーティングシステムと各アプリケーションのカスタマイズされた構成が可能になります。

開発者はデスクトップ上の開発/ステージング/運用環境を再作成する機能を利用してDockerを利用できます。アプリケーションサーバーとデータベースのインストール、またはVirtualBoxの料金の払い戻しなど、開発者マシンをすべてエミュレートする必要はありません。

より高いレベルの分離で試験を自動化することができます。セレンのチームはすでにofficial Docker imagesです。テストハブ全体を作成するには、それらの子犬を持つ公園内を散策する必要があります。

Nginxをサードパーティのモジュールでコンパイルするなどのカスタムソフトウェアの構築は、特殊な画像からコンテナ内で行うこともできます。サーバ全体を専用に保つ必要はなく、すべての依存関係とパッケージを構築してデスクトップを守る必要もありません。

全体として、私たちはDockerの素晴らしい経験をしてきました。ステージング環境をこの新しいプラットフォームに移行し、インフラストラクチャの他の部分も最終的に本番環境に移行する予定です。ここまでは順調ですね。

私はあなたに十分な人々がそれをよく見て納得できることを願っています。私は、そのアイデアに慣れるまでにはいつか私を受け入れたことを認めます。しかし、一度それを得る、それは実際にそれの価値がある。

関連する問題