Spotify はこのプロジェクトの最新バージョンを内部で使用しなくなりました。私たちが使用している docker-client のバージョンは、helios の pom.xml にあるものと同じです。現時点では、新しい機能の開発や受け入れは行っておらず、重大ではないバグの修正も行っていません。ただし、このリポジトリを自由にフォークしてください。
これは Java で書かれた Docker クライアントです。 Spotify の多くの重要な制作システムで使用されています。
docker-client は、Docker の最新の 6 つのマイナー リリースに対して構築およびテストされています。現在、これらは 17.03.1 ですce - 17.12.1 ce (特にここのもの)。 Docker 17.12.1~ce でテストしたアーティファクトをアップロードします。 Docker バージョンと API バージョン間のマッピングについては、Docker ドキュメントを参照してください。
最新の JAR をダウンロードするか、Maven 経由で取得します。
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< version >LATEST-VERSION version >
dependency >
// Create a client based on DOCKER_HOST and DOCKER_CERT_PATH env vars
final DockerClient docker = DefaultDockerClient . fromEnv (). build ();
// Pull an image
docker . pull ( "busybox" );
// Bind container ports to host ports
final String [] ports = { "80" , "22" };
final Map < String , List < PortBinding >> portBindings = new HashMap <>();
for ( String port : ports ) {
List < PortBinding > hostPorts = new ArrayList <>();
hostPorts . add ( PortBinding . of ( "0.0.0.0" , port ));
portBindings . put ( port , hostPorts );
}
// Bind container port 443 to an automatically allocated available host port.
List < PortBinding > randomPort = new ArrayList <>();
randomPort . add ( PortBinding . randomPort ( "0.0.0.0" ));
portBindings . put ( "443" , randomPort );
final HostConfig hostConfig = HostConfig . builder (). portBindings ( portBindings ). build ();
// Create container with exposed ports
final ContainerConfig containerConfig = ContainerConfig . builder ()
. hostConfig ( hostConfig )
. image ( "busybox" ). exposedPorts ( ports )
. cmd ( "sh" , "-c" , "while :; do sleep 1; done" )
. build ();
final ContainerCreation creation = docker . createContainer ( containerConfig );
final String id = creation . id ();
// Inspect container
final ContainerInfo info = docker . inspectContainer ( id );
// Start container
docker . startContainer ( id );
// Exec command inside running container with attached STDOUT and STDERR
final String [] command = { "sh" , "-c" , "ls" };
final ExecCreation execCreation = docker . execCreate (
id , command , DockerClient . ExecCreateParam . attachStdout (),
DockerClient . ExecCreateParam . attachStderr ());
final LogStream output = docker . execStart ( execCreation . id ());
final String execOutput = output . readFully ();
// Kill container
docker . killContainer ( id );
// Remove container
docker . removeContainer ( id );
// Close the docker client
docker . close ();
docker-client の使用方法については、ユーザー マニュアルを参照してください。それを構築および開発する方法を探している場合は、読み続けてください。
docker-client は、Docker 1.6 以降、JDK8 以降、および Maven 3 の最新バージョンを備えた任意のプラットフォームでビルド可能である必要があります。
Docker for Mac とDefaultDockerClient.fromEnv()
使用している場合、 DOCKER_HOST
環境変数にどの値を使用するかが明確でない可能性があります。少なくともバージョン 1.11.1-beta11 では、使用する必要がある値はDOCKER_HOST=unix:///var/run/docker.sock
です。
docker-client のバージョン 4.0.8 以降、 DefaultDockerClient.fromEnv()
OS X 上でデフォルトでunix:///var/run/docker.sock
を使用します。
ネイティブ swarm サポートを含む docker の最新バージョン (>= 1.12) を実行している場合は、必ずdocker swarm init
を実行して docker swarm を初期化してください。
Docker デーモンが実行中であり、 docker ps
実行できることを確認してください。
mvn test
使用すると、テストを独自に実行できます。テストでは多数のコンテナーが開始および停止されるため、多くのテストを実行すると、 docker ps -a
で表示されるコンテナーのリストがかなり長くなり始めることに注意してください。時々 docker rm $(docker ps -aq)
を発行すると役立つ場合があります。
master ブランチにコミットすると、継続的インテグレーション エージェントが jar をビルドし、Sonatype にアップロードしてリリースします。必要な資格情報を持つプロジェクト管理者であれば、以下を実行してローカルでビルドしてリリースすることもできます。
mvn clean [-DskipTests -Darguments = -DskipTests] -Dgpg.keyname= < key ID used for signing artifacts > release:prepare release:perform
リリース 2.7.6 以前では、デフォルトのアーティファクトはシェーディング バージョンであったことに注意してください。バージョン 2.7.7 にアップグレードするとき、docker-client jar 内のシェーディングされた依存関係に依存していた場合は、シェーディングされた分類子を含める必要があります。
標準:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< version >3.5.12 version >
dependency >
網掛け:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< classifier >shaded classifier >
< version >3.5.12 version >
dependency >
これは、プロジェクトで Jersey 1.x を使用する場合に特に重要です。 docker-client および Jersey 2.x との競合を回避するには、上記の影付きバージョンを明示的に指定する必要があります。
このプロジェクトはオープン行動規範に準拠しています。参加することにより、この規範を遵守することが期待されます。