Spotify ya no utiliza versiones recientes de este proyecto internamente. La versión de Docker-Client que estamos usando es la que tiene Helios en su pom.xml. En este punto, no estamos desarrollando ni aceptando nuevas funciones ni siquiera corrigiendo errores no críticos. Sin embargo, siéntete libre de bifurcar este repositorio.
Este es un cliente Docker escrito en Java. Se utiliza en muchos sistemas de producción críticos en Spotify.
docker-client está creado y probado con las seis versiones menores más recientes de Docker. Ahora mismo estos son 17.03.1 CE - 17.12.1 ce (específicamente los de aquí). Subimos el artefacto probado en Docker 17.12.1~ce. Consulte los documentos de Docker sobre la asignación entre la versión de Docker y la versión de API.
Descargue el último JAR o consígalo a través de 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 está buscando cómo utilizar Docker-Client, consulte el Manual del usuario. Si estás buscando cómo construirlo y desarrollarlo, sigue leyendo.
docker-client debería poder construirse en cualquier plataforma con Docker 1.6+, JDK8+ y una versión reciente de Maven 3.
Si está utilizando Docker para Mac y DefaultDockerClient.fromEnv()
, es posible que no esté claro qué valor usar para la variable de entorno DOCKER_HOST
. El valor que debes usar es DOCKER_HOST=unix:///var/run/docker.sock
, al menos a partir de la versión 1.11.1-beta11.
A partir de la versión 4.0.8 de docker-client, DefaultDockerClient.fromEnv()
usa unix:///var/run/docker.sock
en OS X de forma predeterminada.
Si está ejecutando una versión reciente de Docker (>= 1.12), que contiene soporte nativo para Swarm, asegúrese de ejecutar docker swarm init
para inicializar el Docker Swarm.
Asegúrese de que el demonio Docker se esté ejecutando y de que pueda ejecutar docker ps
.
Puede ejecutar pruebas por su cuenta con mvn test
. Tenga en cuenta que las pruebas inician y detienen una gran cantidad de contenedores, por lo que la lista de contenedores que ve con docker ps -a
comenzará a alargarse bastante después de muchas ejecuciones de pruebas. Puede resultarle útil emitir ocasionalmente docker rm $(docker ps -aq)
.
Las confirmaciones con la rama master activarán a nuestro agente de integración continua para que construya el jar y lo publique cargándolo en Sonatype. Si es mantenedor de proyectos y tiene las credenciales necesarias, también puede compilar y publicar localmente ejecutando lo siguiente.
mvn clean [-DskipTests -Darguments = -DskipTests] -Dgpg.keyname= < key ID used for signing artifacts > release:prepare release:perform
Tenga en cuenta que en las versiones 2.7.6 y anteriores, el artefacto predeterminado era la versión sombreada. Al actualizar a la versión 2.7.7, deberá incluir el clasificador sombreado si confió en las dependencias sombreadas en el archivo jar del cliente acoplable.
Estándar:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< version >3.5.12 version >
dependency >
Sombreado:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< classifier >shaded classifier >
< version >3.5.12 version >
dependency >
Esto es particularmente importante si usa Jersey 1.x en su proyecto. Para evitar conflictos con Docker-Client y Jersey 2.x, deberá especificar explícitamente la versión sombreada arriba.
Este proyecto se adhiere al Código Abierto de Conducta. Al participar, se espera que respete este código.