Spotify verwendet intern keine neueren Versionen dieses Projekts mehr. Die von uns verwendete Docker-Client-Version ist die Version, die Helios in seiner pom.xml hat. Derzeit entwickeln oder akzeptieren wir keine neuen Funktionen und beheben nicht einmal unkritische Fehler. Fühlen Sie sich jedoch frei, dieses Repo zu forken.
Dies ist ein in Java geschriebener Docker-Client. Es wird in vielen kritischen Produktionssystemen bei Spotify verwendet.
docker-client wurde mit den sechs neuesten Nebenversionen von Docker erstellt und getestet. Im Moment sind dies der 17.03.1 ce - 17.12.1 ce (insbesondere die hier). Wir laden das auf Docker 17.12.1~ce getestete Artefakt hoch. Informationen zur Zuordnung zwischen Docker-Version und API-Version finden Sie in der Docker-Dokumentation.
Laden Sie das neueste JAR herunter oder greifen Sie über Maven zu.
< 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 ();
Wenn Sie wissen möchten, wie Sie Docker-Client verwenden, lesen Sie das Benutzerhandbuch. Wenn Sie wissen möchten, wie Sie es aufbauen und entwickeln können, lesen Sie weiter.
Docker-Client sollte auf jeder Plattform mit Docker 1.6+, JDK8+ und einer aktuellen Version von Maven 3 erstellt werden können.
Wenn Sie Docker für Mac und DefaultDockerClient.fromEnv()
verwenden, ist möglicherweise nicht klar, welcher Wert für die Umgebungsvariable DOCKER_HOST
verwendet werden soll. Der Wert, den Sie verwenden sollten, ist DOCKER_HOST=unix:///var/run/docker.sock
, mindestens ab Version 1.11.1-beta11.
Ab Version 4.0.8 von Docker-Client verwendet DefaultDockerClient.fromEnv()
standardmäßig unix:///var/run/docker.sock
unter OS X.
Wenn Sie eine aktuelle Version von Docker (>= 1.12) verwenden, die native Swarm-Unterstützung enthält, stellen Sie bitte sicher, dass Sie docker swarm init
ausführen, um den Docker Swarm zu initialisieren.
Stellen Sie sicher, dass der Docker-Daemon ausgeführt wird und dass Sie docker ps
ausführen können.
Mit mvn test
können Sie Tests selbst ausführen. Beachten Sie, dass die Tests eine große Anzahl von Containern starten und stoppen, sodass die Liste der Container, die Sie mit docker ps -a
sehen, nach vielen Testläufen ziemlich lang wird. Es kann hilfreich sein, gelegentlich docker rm $(docker ps -aq)
auszugeben.
Commits an den Master-Zweig veranlassen unseren Continuous-Integration-Agenten, das JAR zu erstellen und durch Hochladen auf Sonatype freizugeben. Wenn Sie ein Projektbetreuer mit den erforderlichen Anmeldeinformationen sind, können Sie auch lokal erstellen und veröffentlichen, indem Sie Folgendes ausführen.
mvn clean [-DskipTests -Darguments = -DskipTests] -Dgpg.keyname= < key ID used for signing artifacts > release:prepare release:perform
Bitte beachten Sie, dass in den Versionen 2.7.6 und früher das Standardartefakt die schattierte Version war. Beim Upgrade auf Version 2.7.7 müssen Sie den schattierten Klassifikator einbinden, wenn Sie sich auf die schattierten Abhängigkeiten im Docker-Client-JAR verlassen haben.
Standard:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >docker-client</ artifactId >
< version >3.5.12</ version >
</ dependency >
Schattiert:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >docker-client</ artifactId >
< classifier >shaded</ classifier >
< version >3.5.12</ version >
</ dependency >
Dies ist besonders wichtig, wenn Sie Jersey 1.x in Ihrem Projekt verwenden. Um Konflikte mit Docker-Client und Jersey 2.x zu vermeiden, müssen Sie die oben schattierte Version explizit angeben.
Dieses Projekt folgt dem Open Code of Conduct. Durch Ihre Teilnahme wird von Ihnen erwartet, dass Sie diesen Kodex respektieren.