データサイエンス向けDocker


7

最近、Dockerに関する記事を読み始めました。
私にとって、データサイエンスでは、Dockerは次の理由で役立ちます。

1)まったく異なる環境があり、ライブラリーと依存関係の問題から保護されている。

2)たとえば、アプリケーションが会社のデータベースを変更する場合、まずコードが正常に機能し、データベースに悪影響を及ぼさないことを確認する必要があります。したがって、最初にDockerを使用してコードをテストします。

私の質問:

  • 2つ目の理由はサンドボクシングについてだけだと言ってもよろしいですか。最初の理由は、サンドボクシングとは関係ありませんよね?

  • Dockerがデータサイエンスで役立つ他の理由はありますか?

  • データサイエンスのためのDockerに関する興味深い研究論文はあまり見つかりません。有名なものを知っていますか?


最後に、おそらくすべての質問の組み込みと回答を終え、セキュリティの部分と会議からのリソースについて詳細に説明し、データサイエンティストがコンテナを使用する理由と方法についての事例を使用しました。より詳細なバージョンが必要な場合はお知らせください:)
n1tk '25

回答:


4

テクノロジー用語に焦点を当てるのではなく、一般化された答えを提供し、「コンテナー」という用語を使用します。

コンテナーは実行されるはずのものだけを実行し、不明なものは信頼できないと仮定して、コンテナーの存続期間中のみコンテナーに常駐するものなので、テストするためのデータベース内のコードの変更は、VM(サンドボックス)またはコンテナー(Docker)で同じアプローチになります最大の違いは、アプリケーションの数秒でknリソース消費とVMをプロビジョニングする時間とコンテナー/ポッドを起動する時間です。

詳細:

Part1_アプリケーションの観点から

次の点からデータサイエンスの世界に来るとき、コンテナーは非常に重要です。

  • 異なる開発プロジェクトの競合するライブラリバージョンを最小限に抑えます(各プロジェクトには、実行する独自のコンテナー/ポッドがあります)。
  • 特定の設計基準に対する環境および開発者間の一貫性。
  • Edge Node On Demandによるラピッドプロトタイピング。

  • 更新または障害が発生した後、すべてを新しいハードウェアに再インストールする必要がなくなります。

  • コンピューティング環境の移植性、マシンでの開発、CPU、RAM、GPUなどのリソースがさらに必要な場合は、環境をクラウド、強力なクラスター、強力なマシン、KubernetesまたはSwarmと呼ばれるDockerizedクラスターで調整できるコンテナーのグループに移植できます。。
  • グループ全体でコラボレーションの明確性を最大化します。一貫性のあるライブラリ、結果セットなど
  • オンプレミスの自律性/俊敏性をクラウドスケールとリーチに拡張します。
  • 環境構成を制御するためのDockerコンテナーを利用したプロジェクトワークスペース。新しいパッケージをインストールしたり、組み込みのターミナルから直接コマンドラインスクリプトを実行したりできます。
  • コンテナーが使用するリソースはVMまたはベアメタルに比べてごくわずかです... VMまたはベアメタルで複数のコンテナーを実行できるため、OSのライセンスコストが大幅に削減され、プロジェクト/アプリは必要なリソースに基づいて拡張され、完全なリソースではありませんホストの(ここで注意:コンテナーを使用しない場合は、コンテナーで複数のアプリ/モデルを実行します。コンテナーなしで比較すると、単一のアプリ/モデルに対して完全なマシンリソースを使用します。これはリソースの無駄です。クラスター環境では、複数のポッド/コンテナーを起動します(クラスター全体でアプリ/モデルがあり、ポッドのコストが各ホストのOSに対して支払うVMと比較してゼロで、そのタスクにすべてのリソースを実行します)。
  • 新しいパッケージがインストールされた新しいイメージを簡単に作成し、代わりに全員と共有して、仮想環境をVMに取り込んだり、パッケージの競合などを起こしたりすることができます(仮想環境を従来のアプローチからコンテナーに移行したいので、これは良いでしょうデータサイエンティストが各プロジェクトの構成をすべての競合で個別にバイパスし、アクティブ化/非アクティブ化して、コンテナで必要なのが構成ファイルのみであるときに本番環境に配置するときに要件を検索するのに役立ちます。これは私の視点です。私がデータサイエンスの世界で毎日目にすること)。
  • インフラストラクチャに依存しないプラットフォームにより、データサイエンティストは、アプリケーションに最適化されたインフラストラクチャ上で分析アプリケーションを実行できます
  • データサイエンティストが、アプリケーションや環境の競合を心配することなく、研究に最適なツールとパッケージを使用してモデルを構築できるようにします。
  • 最も重要な研究の再現性:コンテナーによって提供されるSCALEは、コンテナーで簡単に拡張でき、すべての環境で同一であり、ホストOSを気にせず、不変のコンテナーによる分析と研究の再現性を確保し、異なる環境での問題を排除します
  • 安全なコラボレーション:プラットフォームとライフサイクルに統合されたセキュリティにより、改ざんやデータの整合性のリスクなしにコラボレーションを実現できます(詳細はパート2および3を参照)。

Clouderaと Cloudera Data Science Workbenchの組み合わせ 、AnacondaとAnaconda Enterpriseの両方がコンテナを使用しているため、ビジネスに迅速な結果をもたらし、開発からQA、そして最終的には本番環境へとモデルを簡単にデプロイできます。

なぜ重要な最後のステートメントですか?環境に変更を加えることなく、運用から運用までのコストをかけずに、開発から製品への移植性を実現します。

Part2_セキュリティの観点から

悪名高いセキュリティ上の利点の1つは、ホストOSのセキュリティがコンテナーから分離されていることです。つまり、パッチが個別に適用され、ホストOSにパッチを適用してもコンテナー化されたアプリケーションには影響しません(OSにパッチを適用するときに問題が発生し、そのOSのアプリとサービス(パス、ポート、サービスなど)?

  • 例:libraryアプリ/コードに悪意のあるマルウェアが存在する場合、そのマルウェアはコンテナーの稼働中はそのコンテナーにのみ存在し、コンテナーは常にエンドポイントとして実行され、マルウェアを拡散するケースは見られませんでしたネットワークに。
  • コンテナーノードの監視は堅牢であり、アプリケーションまたはノードの動作を監視するためにアドオンまたはサービスを配置でき、新しいノード/コンテナーのみを複製し、構成ファイルのみに基づいて複製します。

VMとコンテナの比較:コンテナは別の話ですが、OSをコンテナとは別に管理します(セキュリティが設定されている場合、コンテナは別のタスクです)。

Dockerセキュリティは、主要なセキュリティポイントの詳細情報を提供します。

Dockerの標準とコンプライアンスは、コンテナで利用可能なセキュリティのコンプライアンスと標準の完全なリストを提供します。

「巧妙に作成されたseccompプロファイル(予期しないシステムコールをブロックする)を持つDockerコンテナーは、ハイパーバイザーとほぼ同等のセキュリティを提供します。」

フォルダ共有。コンテナーを使用すると、共有マウントをセットアップしてフォルダーを共有できます。Docker/ kernelはコンテナーが使用するファイルアクセス許可を適用するため、ゲストシステムはその制限を回避できません。これは、データサイエンスアプリケーションとユーザーにとって非常に重要です。企業ではほとんどの場合、機密性の高い/制限されたデータが使用され、セキュリティまたは制限の複数のレイヤーが設定されているため、このセキュリティの問題を解決する1つのアプローチは、ADグループでVDIまたはVMを使用することです。データアクセスを制限/共有するための適切な場所にあり、リソースの維持と割り当てに問題とコストがかかります。

すべてのサービスとログが生成されたアプリケーションまたはOSをデバッグすることになると、コンテナーは今やNLPアプローチに勝って進化していると思います。セキュリティのナラティブを校正するための実験的自然言語処理(NLP)ユーティリティも含まれています。

ここでは、GoogleからJianing Guoを引用します:適切に保護および更新されたVMは、通常のアプリケーションとコンテナーワークロードの両方に適用されるプロセスレベルの分離を提供します。お客様は、Linuxセキュリティモジュールを使用してコンテナーの攻撃面をさらに制限できます。たとえば、オープンソースの本稼働グレードのコンテナーオーケストレーションシステムであるKubernetesは、AppArmor、Seccomp、およびSELinuxとのネイティブ統合をサポートし、コンテナーに公開されるシステムコールに制限を課します。Kubernetesは、コンテナの分離をさらにサポートする追加のツールも提供します。PodSecurityPolicyを使用すると、ノードレベルでワークロードが実行またはアクセスできる内容に制限を課すことができます。VMレベルの分離を必要とする特に機密性の高いワークロードの場合、

さらに、kubernetesクラスターには次の追加のセキュリティ機能があります。

  1. すべてのAPIトラフィックにトランスポート層セキュリティ(TLS)を使用する
  2. API認証
  3. API承認
  4. VMや専用のベアメタルと比較して、セキュリティの欠陥を簡単に修正し、アプリケーション/環境への影響を最小限に抑えます。

Part3_ コンテナを強化するためのCISベンチマークDocker & Kubernetes

  1. コンテナーをより安全にする最初のステップは、コンテナー化されたワークロードの実行に使用する予定のホストマシンを準備することです。コンテナホストを保護し、インフラストラクチャセキュリティを守ることで、ベストプラクティスは、コンテナ化されたワークロードを実行するための強固で安全な基盤を構築します。

  2. Dockerの更新、ソフトウェアの脆弱性を最新の状態に保ちます。

  3. デフォルトのパスは(ドッカー関連ファイルのための特定の専用のディレクトリを持っているとコンテナを実行するために参照するだけの十分なスペースを割り当てる/var/lib/dockerが、OSレベルでの他の取り付け点と、モニターへの変更が使用しauditdたりaide services変更またはサイズ/不要なワークロードの実行のために、ログを保存必要に応じて設定します。

注:最良の点step 2は、VMを使用する場合、データサイエンスプロジェクトの場所をさらに監視する必要があることです(異なる場所にあるライブラリ、複数のバージョンのパッケージ、Pythonの場所/パス、cron jobs or systemd一部のプロセスが実行されることを確認するために実行、すべてのログ)ログなどですが、コンテナを使用すると、このすべてのジョブが単一のポイントで実行され、複数のパスではなくパスのみが監視されます。

  1. システムへの侵入dockerを防ぐため、ユーザーを常にグループに入れて確認しますunauthorized elevated access(Dockerは、コンテナーのアクセス権を制限せずに、Dockerホストとゲストコンテナー間のディレクトリの共有を許可します)。信頼されていないユーザーはdockerグループから削除し、作成しないでください。機密ディレクトリのマッピングにより、ホストがコンテナボリュームに移ります。ここでは、インストールと特定のコンテナタスクに別のユーザーを使用するとします。「rootコンテナの実行にはPID、このタスク専用に使用ないでください(アクセスは昇格されますが、タスクベースになります。クラスタには重力を使用します。インストール時には絶対に使用しません。ルートを使用)。

  2. すべてのDockerデーモンアクティビティを監査します(コンテナー化された「world」でログのスペースをとるので、ログと必要な構成(ログを保存するためのローテーションと期間)を保持するために適切なスペースを持つ個別のパーティションを準備してください。

  3. etc、varなどのすべてのDockerファイルとdocker.serviceを監査し、他に何が適用できるかを監査します。

  4. すべてのコンテナー間通信を制限し、通信が必要な特定のコンテナーをリンクします(カスタムネットワークを作成し、そのカスタムネットワークと通信する必要のあるコンテナーのみに参加するのが最善です)。この強化アプローチにより、他のコンテナへの意図しない、望ましくない情報の開示が防止されます。

  5. コンテナ化されたインフラストラクチャ内のすべてのアプリケーションを構成するか、少なくとも選択できるようにする必要がありますEncryp All Sensitive Informationsensitive data会社を含むほとんどの場合、データにアクセスするためにプラットフォームにログインするため、これはデータサイエンティストにとって非常に重要です。

  6. 転送中にすべての機密情報を暗号化するオプションがあります。

  7. 特定の承認されたのみを使用Ports, Protocols and Servicesします。アプリ/プロジェクトを実行する場合、VMはよりオープンな表面を持ちます。コンテナーは、使用されるもののみを指定し、OSレベルで実行される保護またはモニター、これは最小化し"attack surface"ます。

  8. システムに保存されている機密情報は保存時に暗号化され、情報にアクセスするためにオペレーティングシステムに統合されていない二次認証メカニズムが必要です。

  9. DOESを有効にすることを可能にするOperating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies:ようData Execution Prevention(DEP)Address Space Layout Randomization (ASLR)

  10. VMとコンテナの最も単純なセキュリティの違いは、プロジェクトを更新または実行する場合、VMまたはネットワーク全体で管理者特権でアクセスする必要はなく、定義されたユーザーとして実行するだけで、管理者特権でアクセスする場合は、コンテナの時間であり、ホスト全体で共有されていません(データサイエンスライブラリのインストール、更新、プロジェクトコードの実行など)。

Part4_データサイエンスのコンテナに関連するその他のリソース(Part1-3に組み込まれたリンクの上):

  1. Dockerのデータサイエンス
  2. Conda、Docker、Kubernetes:データサイエンスのクラウドネイティブな未来(Anacondaが主催)
  3. https://devblogs.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
  4. データサイエンティストがKubernetesを愛する理由
  5. データサイエンスのDockerの使用法を理解するための非常に優れた本:データサイエンスのDocker:構築するJupyter Notebook Serverの周りのスケーラブルで拡張可能なデータインフラストラクチャ

どうもありがとう !!しかし、セキュリティ上の理由については触れませんでしたか?
nolw38

1

ドッカースウォームモードあなたは、低コスト機の独自のセキュアクラスタを設定することができます。

  • したがって、大規模なデータセットの分散処理に関心がある場合は、Docker Swarm(またはおそらくコンテナ管理ツールKubernetes)が、並列処理のために、Apache Spark(または類似のソフトウェア)を多くのコンテナ(またはホスト)にデプロイするための基礎となります。

  • データストリームをリアルタイムで分析する場合、仮想化テクノロジーのベンダーから高価なネットワーク機器や高価な管理ソフトウェアを大量に購入しなくても、現在の需要に応じて比較的簡単にクラスターをスケールアップできます。

(MOOCのコンテキストでのおもちゃの例を除いて、私はこれを個人的に行いませんでした。ただし、2019年4月の Docker SwarmでのSparkに関する他の誰かによるブログ投稿があります。-SwarmモードはかつてDocker Enterprise Editionでのみ利用可能であったことに注意してください、無料のコミュニティエディションではありません。ドキュメントにはその旨が表示されなくなりましたが、確かではありません)


1

どちらの理由も、仮想環境と、開発活動と運用活動を統合する開発文化についてです。この機能を説明するために、サンドボックスではなく「テスト環境」という用語を使用します。

Dockerは、データサイエンスのツールに役立ちます。他の理由としては、誰もが同じイメージ(依存関係とライブラリの問題についてのあなたのポイント)を使用しているため、さまざまな関係者間のコラボレーションが容易になり、使用しているOSに依存しない誰とでもアプリケーション/コード/ワークフローを共有および管理しやすくなることがあります。基本的に、コード、その管理をサードパーティと共有し、ライブラリの依存関係に関するユーザーの要求を共有することは役に立ちます。

興味深い研究論文は知りませんが、この質問はPythonまたはRに関する興味深い研究論文があるかどうかを尋ねるのと少し似ていると思います。


では、データサイエンスでは、Dockerはサンドボックスとは何の関係もありませんか?そして、セキュリティについての理由は、「アプリケーションのテスト環境を持っている」ほうがよいでしょうか?
nolw38

いいえ、サンドボックスが多くのアプリケーションの1つであることを意味しました。テスト環境は、操作を実行する環境にできる限り近づけて、サンドボックス化だけでなく、例のバグ修正も含める必要があるため、少し大きくなります。セキュリティに関しては、何が機能しているか(操作、つまり、指定した例のデータベース)を台無しにしたくない開発文化と、開発(新しいことを試す)に関係しています。
H.レクター博士
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.