Spotify n'utilise plus les versions récentes de ce projet en interne. La version du client docker que nous utilisons est celle qu'Helios a dans son pom.xml. À ce stade, nous ne développons ni n’acceptons de nouvelles fonctionnalités ni même ne corrigeons les bogues non critiques. N'hésitez pas à créer ce dépôt.
Il s'agit d'un client Docker écrit en Java. Il est utilisé dans de nombreux systèmes de production critiques chez Spotify.
docker-client est construit et testé avec les six versions mineures les plus récentes de Docker. En ce moment, nous sommes le 17.03.1 ce - 17.12.1 ce (en particulier ceux ici). Nous téléchargeons l'artefact testé sur Docker 17.12.1~ce. Consultez la documentation Docker sur le mappage entre la version Docker et la version API.
Téléchargez le dernier JAR ou récupérez-le via 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 ();
Si vous cherchez comment utiliser Docker-Client, consultez le manuel d'utilisation. Si vous cherchez comment le construire et le développer, continuez à lire.
docker-client doit pouvoir être construit sur n'importe quelle plate-forme avec Docker 1.6+, JDK8+ et une version récente de Maven 3.
Si vous utilisez Docker pour Mac et DefaultDockerClient.fromEnv()
, la valeur à utiliser pour la variable d'environnement DOCKER_HOST
n'est peut-être pas claire. La valeur que vous devez utiliser est DOCKER_HOST=unix:///var/run/docker.sock
, au moins à partir de la version 1.11.1-beta11.
Depuis la version 4.0.8 de docker-client, DefaultDockerClient.fromEnv()
utilise unix:///var/run/docker.sock
sur OS X par défaut.
Si vous utilisez une version récente de Docker (>= 1.12), qui contient une prise en charge native de l'essaim, assurez-vous d'exécuter docker swarm init
pour initialiser l'essaim de docker.
Assurez-vous que le démon Docker est en cours d'exécution et que vous pouvez exécuter docker ps
.
Vous pouvez exécuter des tests vous-même avec mvn test
. Notez que les tests démarrent et arrêtent un grand nombre de conteneurs, donc la liste des conteneurs que vous voyez avec docker ps -a
commencera à devenir assez longue après de nombreuses exécutions de tests. Vous trouverez peut-être utile d'émettre occasionnellement docker rm $(docker ps -aq)
.
Les validations dans la branche master déclencheront notre agent d'intégration continue pour créer le fichier jar et le publier en le téléchargeant sur Sonatype. Si vous êtes un responsable du projet avec les informations d'identification nécessaires, vous pouvez également créer et publier localement en exécutant la commande ci-dessous.
mvn clean [-DskipTests -Darguments = -DskipTests] -Dgpg.keyname= < key ID used for signing artifacts > release:prepare release:perform
Veuillez noter que dans les versions 2.7.6 et antérieures, l'artefact par défaut était la version ombrée. Lors de la mise à niveau vers la version 2.7.7, vous devrez inclure le classificateur ombré si vous vous êtes appuyé sur les dépendances ombrées dans le fichier jar du client docker.
Standard:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< version >3.5.12 version >
dependency >
Ombré :
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< classifier >shaded classifier >
< version >3.5.12 version >
dependency >
Ceci est particulièrement important si vous utilisez Jersey 1.x dans votre projet. Pour éviter les conflits avec docker-client et Jersey 2.x, vous devrez spécifier explicitement la version ombrée ci-dessus.
Ce projet adhère au Code de conduite ouvert. En participant, vous êtes censé honorer ce code.