Docker の仮想化

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:8分
  • ディスカバリーDocker Pattern を使用して、Linux ホスト上で実行されている Docker エンジン内の特定のオブジェクトに関するデータを収集します。

    ServiceNow® プラットフォームでは Docker リリース 1.11.0 以降のディスカバリーがサポートされています。

    ディスカバリー はネットワーク内で Docker エンジンプロセス分類子を実行します。分類子が dockerd プロセスまたは docker daemon プロセスを識別する場合、分類子は水平パターン (HorizontalDiscoveryProbe) プローブをトリガーし、それによって Docker パターンが起動され、Docker コンポーネントからデータの収集が開始されます。
    注:
    プローブからパターンへの移行の詳細については、ナレッジ記事 KB0694477を参照してください。

    必須条件

    ユーザー特権
    Docker ディスカバリー を実行するために使用される認証情報を持つユーザーには、次のいずれかの方法で定義された特権が必要です。
    • Docker デーモンは root ユーザーとして実行されるため、実行中のコマンドの昇格された権限をユーザーに提供します。Docker パターンは、sudopbrun など、root ユーザーとして実行される特権コマンドの使用をサポートしています。
    • Docker コマンドを実行するための特別な権限を持つ docker という名前のグループにアサインされます。グループの設定方法については、Docker のドキュメントを参照してください。
    最新のパターン
    ServiceNow Store から最新のディスカバリーとサービスマッピングパターンアプリケーションを展開します。

    Docker の制限事項と考慮事項

    Docker の仮想化を使用する場合は、次のことを検討してください。
    • 最初の ディスカバリー プロセススキャンでは、コンテナー内のアプリケーションを識別し、正しく分類することができます。ただし、そのアプリケーションを探索するために起動された後続のプローブはコンテナーの内部を確認できず、アプリケーションの詳細を返すことができません。
    • ディスカバリー は、アクティブでないコンテナーを含む、検出したすべてのコンテナーをスキャンするので、ディスカバリー の速度が低下する場合があります。これを避けるには、実行されていないコンテナーを削除する必要があります。
    • sn_itom_pattern.manifest_digest_image_id プロパティを true に設定してディスカバリーを実行する前に、すべての Docker 画像レコードを削除して、重複する Docker レコードが作成されないようにします。
    • コンピューター 1 台につき (物理マシン上と仮想マシン上のいずれであっても) 1 つの Docker エンジンのみが許可されています。

    水平ディスカバリー中に ディスカバリー によって収集されるデータ

    これらの属性は、親 OSLV テーブルから派生した属性に加えて検出されます。
    テーブルとフィールド 説明
    Docker エンジン [cmdb_ci_docker_engine]
    名前 [name] Docker エンジンのインスタンスに関する情報を格納します。
    OS アーキテクチャ [os_arch]
    GIT コミット [git_commit]
    ビルド日 [build_date]
    バージョン [version]
    API バージョン [api_version]
    Go バージョン [go_version]
    クラスター化 [is_clustered]
    実行中のプロセス [running_process]
    実行中のプロセスのコマンド [running_process_command]
    実行中のプロセスのキーパラメーター [running_process_key_parameters]
    Docker イメージ [cmdb_ci_docker_image]
    名前 [name] Docker イメージのグローバルに一意の表現に関する情報を格納します。
    イメージ ID [image_id]
    イメージダイジェスト [image_digest]
    サイズ (バイト) [size_byte]
    作成されるイメージ [image_created_at]
    Docker ローカルイメージ [cmdb_ci_docker_local_image]
    名前 [name] Docker イメージのローカルインスタンスを格納します。
    イメージ ID [image_id]
    Docker イメージタグ [cmdb_ci_docker_image_tag]
    名前 [name] ローカル Docker イメージのタグを格納します。
    イメージ ID [image_id]
    リポジトリ [repository]
    タグ [tag]
    Docker コンテナー [cmdb_ci_docker_container]
    名前 [name] ホストで見つかった Docker コンテナーを格納します。

    重複レコードが作成された場合は、ディスカバリーが実行されると重複排除タスクが表示されます。これらのタスクを解決する方法については、ServiceNow® ナレッジベースの記事「Making docker container identifier independent (Docker コンテナ識別子を独立させる) [KB1443042]」を参照してください。

    イメージ ID [image_id]
    コンテナー ID [container_id]
    サイズ (バイト) [size_bytes]
    コマンド [command]
    コンテナー作成日時 [container_created]
    ステータス [status]
    Collect Container Repository の拡張セクションはこの情報を検出します。
    テーブルとフィールド 説明
    コンテナーリポジトリ [cmdb_ci_container_repository]
    名前 [name] コンテナーリポジトリの名前。
    コンテナーリポジトリエントリー [cmdb_ci_container_repository_entry]
    名前 [name] コンテナーリポジトリエントリーの名前
    カテゴリ [category] コンテナーリポジトリエントリーのカテゴリ

    CI 関係

    Docker パターンで、検出された CI 間の次の関係を識別します。
    CI 関連 CI
    cmdb_ci_server Runs::Runs On cmdb_ci_docker_engine
    cmdb_ci_docker_engine Manages::Managed By cmdb_ci_docker_container
    cmdb_ci_docker_engine Manages::Managed By cmdb_ci_docker_local_image

    cmdb_ci_docker_image

    Instantiates::Instantiated By

    cmdb_ci_docker_container

    cmdb_ci_docker_local_image

    注:
    この関係の方向は、1.0.99 (2023 年 2 月) より前のすべてのストアバージョンでは逆になります。

    Instantiates::Instantiated By

    cmdb_ci_docker_container

    cmdb_ci_docker_image_tag Registered On::Has Registered cmdb_ci_docker_local_image
    cmdb_ci_docker_local_image Instantiates::Instantiated By cmdb_ci_docker_image
    図 : 1. OSLV および Docker 依存テーブルの親と子の関係
    OSLV テーブル
    [Docker パターン] の Collect Container Repository 拡張セクションで、これらの関係を識別します。
    CI 関係 CI
    Docker イメージ [cmdb_ci_docker_image] Provisioned From::Provisioned コンテナーリポジトリエントリー [cmdb_ci_container_repository_entry]
    コンテナーリポジトリエントリー [cmdb_ci_container_repository_entry] Hosted on::Hosts コンテナーリポジトリ [cmdb_ci_container_repository]

    識別、格納、およびホスティングのルール

    ディスカバリーはアプリケーションルール識別子を使用して Docker エンジンを検索し、その他のルールを適用して特定の Docker オブジェクトを識別します。

    アプリケーションルール識別子

    プロセスの分類中に cmdb_ci_docker_engine 構成アイテム (CI) が作成されます。これに基づいて、ディスカバリーはアプリケーション [cmdb_ci_appl] テーブルのアプリケーションルール識別子を使用して、検出された特定の Docker エンジンを識別します。この ID を確立した後、ディスカバリーは格納ルールとホスティングルールで定義された関係を使用して、そのエンジンに関連する個別の Docker コンポーネント CI を正確に作成および更新します。

    識別子
    名前 テーブル 属性
    Docker コンテナ Docker コンテナー [cmdb_ci_docker_container] container_id
    Docker グローバルイメージ Docker イメージ [cmdb_ci_docker_image] image_id
    Docker ローカルイメージ Docker ローカルイメージ [cmdb_ci_docker_local_image] image_id
    Docker イメージタグ Docker イメージタグ [cmdb_ci_docker_image_tag] リポジトリ、タグ
    格納およびホスティングのルール
    Docker ディスカバリーは、これらの格納規則のコレクションを作成または編集するルールとホスティングルールのコレクションを作成または編集するルールを使用して、Docker パターンによって返されるデータから構成アイテム (CI) を作成します。 ディスカバリーは、アプリケーション [cmdb_ci_appl] テーブルとの関係によって Docker エンジンを識別した後、これらのルールを使用して、そのエンジンに接続されている特定の CI を互いの関係から識別します。ディスカバリー はこのようにアプリケーションから下流へ、エンジンから開始してコンポーネントを互いに接続することで、同じ名前または image_id を使用する他の Docker エンジンのコンポーネントに対して重複する CI が作成されないようにしています。
    表 : 1. 格納のルール
    関係
    Docker ローカルイメージ Docker イメージタグ 登録済み
    表 : 2. ホスティング ルール
    関係
    Docker コンテナ Docker エンジン 管理担当者
    Docker ローカルイメージ Docker エンジン 管理担当者