Java APIを使用したDockerの操作に関する簡単な説明

背景:

Docker は、com.github.docker-java ライブラリを使用して Java で簡単に操作できます。以下は、イメージの作成、コンテナーの作成、コンテナーの開始、コンテナーの停止、コンテナーの削除の手順と各手順の手順を含む詳細なチュートリアルです。

前提:

まず、com.github.docker-java ライブラリの依存関係を Java プロジェクトに追加します。ビルド ツール (Maven や Gradle など) の構成ファイルに次の依存関係を追加できます。

<dependency>

    <groupId>com.github.docker-java</groupId>

    <artifactId>docker-java</artifactId>

    <version>3.2.5</version>

</dependency>

Dockerクライアントの作成

import com.github.dockerjava.api.DockerClient;

import com.github.dockerjava.api.DockerClientBuilder;

DockerClient dockerClient = DockerClientBuilder.getInstance()

        .withDockerHost("tcp://localhost:2375")

        .withDockerCertPath("/path/to/cert")

        .withApiVersion("1.41")

        .build();

withDockerHost()Docker デーモンの接続アドレスはメソッドによって設定され、 withDockerCertPath()TLS 証明書のパスはメソッドによって設定され、withApiVersion()Docker API のバージョンはメソッドによって設定されます。最後に、build()メソッドを呼び出してオブジェクトが構築されますDockerClient

  1. DockerClientBuilderクラスは、オブジェクトの構築と構成に使用されるDockerClientビルダー クラスです。これは、Docker デーモンとの通信に必要なパラメーターと構成を設定するための一連のメソッドを提供します。

  2. getInstance()DockerClientBuilderクラスの静的メソッドです。DockerClientBuilderこのメソッドを呼び出すことでシングルトンインスタンスを取得できます。

  3. DockerClientBuilderシングルトン モードを使用する設計は、主に、グローバル共有インスタンスに Docker デーモンへのアクセスを提供することです。DockerClientBuilderこれにより、インスタンスの作成と破棄を繰り返すことがなくなり、パフォーマンスと効率が向上します。

  4. DockerClientBuilder.getInstance()メソッドで取得したインスタンスを使用した後DockerClientBuilder、インスタンスを通じてチェーン呼び出しを行い、Docker デーモンの通信に関連するさまざまなパラメーターと構成を設定できます。

  5. チェーンコールDockerClientBuilder方式では、Dockerデーモンの接続アドレス、認証情報、タイムアウト、TLS設定などを設定できます。これらの方法にはwithDockerHost()、、、、などが含まれますwithDockerCertPath()withDockerConfig()withApiVersion()

  6. 最後に、メソッドを呼び出すことによって、 Docker デーモンと対話するためのbuild()オブジェクトを構築できます。DockerClientこのオブジェクトは、コンテナーの作成、コンテナーの開始、イメージの構築など、さまざまな Docker 操作を実行できます。

イメージの作成

import com.github.dockerjava.api.command.BuildImageResultCallback;

String dockerfilePath = "/path/to/dockerfile";

String imageName = "my-image";

String imageTag = "latest";

dockerClient.buildImageCmd()

    .withDockerfile(new File(dockerfilePath))

    .withTags(Collections.singleton(imageName + ":" + imageTag))

    .exec(new BuildImageResultCallback())

    .awaitCompletion();

  • withDockerfile(new File(dockerfilePath)): イメージをビルドするための Dockerfile のパスを指定します。
  • withTags(Collections.singleton(imageName + ":" + imageTag)):画像のラベルを指定します。このメソッドを通じて、withTagsミラー タグを含むコレクションを渡すことができます。ここでは、Collections.singleton()このメソッドは、要素を 1 つだけ含むコレクションを作成するために使用されます。 
  • withBaseDirectory(baseDirectory): イメージの構築に必要なすべてのファイルが含まれるベース ディレクトリを設定します。withDockerfile()ベース ディレクトリ内の Dockerfileと一緒に使用すると、ビルド コマンドに自動的に関連付けられます。
  • withNoCache(): イメージをビルドするたびにキャッシュを無効にしてすべてのコマンドを再実行し、最新のファイルと依存関係が使用されるようにします。
  • withPull(pull): ビルド前に最新のベース イメージをプルするかどうかを指定します。デフォルトではfalseプルしません。
  • withQuiet():サイレントモードに設定し、イメージビルド時のログ情報を出力しません。
  • withBuildArg(buildArg)Map<String, String>:タイプパラメータを使用してビルドパラメータを設定します。キーと値のペアは、ビルド パラメーターの名前と値を表します。
  • withLabels(labels):Map<String, String>タイプパラメータを使用して画像のラベルを設定します。キーと値のペアは、タグのキーと値を表します。
  • withBuildArgs(buildArgs)Map<String, String>:タイプパラメータを使用してビルドパラメータを設定します。に似ていますwithBuildArg()が、複数のビルド パラメータを一度に設定できます。
  • withPull():ビルド前に最新のベースイメージを取得するかどうかを設定します。
  • withProgressHandler(progressHandler): イメージの構築の進行状況を処理するように設定しますProgressHandler

コンテナの作成

import com.github.dockerjava.api.command.CreateContainerResponse;

import com.github.dockerjava.api.model.Bind;

import com.github.dockerjava.api.model.PortBinding;

import com.github.dockerjava.api.model.Volume;

String imageName = "my-image";

String containerName = "my-container";

int hostPort = 8080;

int containerPort = 80;

String volumeHostPath = "/host/path";

String volumeContainerPath = "/container/path";

CreateContainerResponse container = dockerClient.createContainerCmd(imageName)

    .withName(containerName)

    .withPortBindings(new PortBinding(

        new Binding(null, null, hostPort),

        new ExposedPort(containerPort)))

    .withBinds(new Bind(volumeHostPath, new Volume(volumeContainerPath)))

    .exec();

上記のコードでは、 はimageName使用するイメージの名前とcontainerName作成するコンテナの名前を表します。hostPortcontainerPortはそれぞれ、ポート マッピングに使用されるホスト ポートとコンテナ ポートを表します。ボリュームのマウントに使用されるホスト パスとコンテナ パスを表しますvolumeHostPathvolumeContainerPathこのうち、CreateContainerResponseオブジェクトには、コンテナの ID や名前など、新しく作成されたコンテナに関する情報が含まれます。コンテナの起動や停止などの後続の操作に使用します。

  • withName(containerName): コンテナの名前を指定します。
  • withPortBindings(portBindings):コンテナのポートバインディングを指定します。ホスト ポートをコンテナ内のポートにマッピングするために使用されるオブジェクトportBindingsです。PortBinding
  • withBinds(bindings): コンテナのボリュームバインディングを指定します。ホストのディレクトリまたはボリュームをコンテナ内のパスにマウントするために使用されるオブジェクトbindingsです。Bind

コンテナの起動

1

dockerClient.startContainerCmd(container.getId()).exec();

コンテナの停止と削除

dockerClient.stopContainerCmd(container.getId()).exec();

dockerClient.removeContainerCmd(container.getId()).exec();

上記のコードでは、container.getId()取得されるのはコンテナのIDです。

最後に、私の記事を注意深く読んでくださった皆さんに感謝します。互恵性は常に必要です。それほど価値のあるものではありませんが、使用できる場合は、直接受け取ることができます。

この情報は、[ソフトウェア テスト] の友人にとって最も包括的かつ完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。また、皆さんのお役に立てれば幸いです。

おすすめ

転載: blog.csdn.net/NHB456789/article/details/135244592
おすすめ