Spotify больше не использует последние версии этого проекта внутри себя. Используемая нами версия docker-client — это та версия helios, которая указана в его pom.xml. На данный момент мы не разрабатываем и не принимаем новые функции и даже не исправляем некритические ошибки. Однако не стесняйтесь форкнуть это репо.
Это клиент Docker, написанный на Java. Он используется во многих важных производственных системах Spotify.
docker-client создан и протестирован на шести последних второстепенных выпусках Docker. Сейчас это 17.03.1. вэ - 17.12.1 ce (особенно те, что здесь). Выкладываем артефакт, протестированный на Docker 17.12.1~ce. См. документацию Docker, посвященную сопоставлению версии Docker и версии API.
Загрузите последнюю версию 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 для Mac и DefaultDockerClient.fromEnv()
, может быть неясно, какое значение использовать для переменной среды DOCKER_HOST
. Вам следует использовать значение DOCKER_HOST=unix:///var/run/docker.sock
, по крайней мере, начиная с версии 1.11.1-beta11.
Начиная с версии 4.0.8 docker-client, DefaultDockerClient.fromEnv()
по умолчанию использует unix:///var/run/docker.sock
в OS X.
Если вы используете последнюю версию Docker (>= 1.12), которая содержит встроенную поддержку Swarm, убедитесь, что вы запустили docker swarm init
чтобы инициализировать Docker Swarm.
Убедитесь, что демон Docker запущен и что вы можете выполнить docker ps
.
Вы можете запускать тесты самостоятельно с помощью mvn test
. Обратите внимание, что тесты запускают и останавливают большое количество контейнеров, поэтому список контейнеров, который вы видите с помощью docker ps -a
после многих запусков тестов станет довольно длинным. Возможно, вам будет полезно время от времени запускать docker rm $(docker ps -aq)
.
Фиксация основной ветки заставит нашего агента непрерывной интеграции создать 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 вам потребуется включить затененный классификатор, если вы полагались на затененные зависимости в jar-файле docker-client.
Стандарт:
< 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, вам необходимо явно указать затененную версию выше.
Этот проект придерживается Открытого кодекса поведения. Принимая участие, вы должны соблюдать этот кодекс.