Spotify tidak lagi menggunakan versi terbaru proyek ini secara internal. Versi klien buruh pelabuhan yang kami gunakan adalah versi apa pun yang dimiliki helios di pom.xml-nya. Saat ini, kami tidak mengembangkan atau menerima fitur baru atau bahkan memperbaiki bug yang tidak kritis. Jangan ragu untuk melakukan fork pada repo ini.
Ini adalah klien Docker yang ditulis dalam Java. Ini digunakan di banyak sistem produksi penting di Spotify.
docker-client dibuat dan diuji terhadap enam rilis minor terbaru Docker. Saat ini adalah 17.03.1 ce - 17.12.1 ce (khusus yang di sini). Kami mengunggah artefak yang diuji pada Docker 17.12.1~ce. Lihat dokumen Docker tentang pemetaan antara versi Docker dan versi API.
Unduh JAR terbaru atau ambil melalui 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 ();
Jika Anda mencari cara menggunakan klien buruh pelabuhan, lihat Panduan Pengguna. Jika Anda mencari cara membangun dan mengembangkannya, teruslah membaca.
docker-client harus dapat dibangun pada platform apa pun dengan Docker 1.6+, JDK8+, dan versi terbaru Maven 3.
Jika Anda menggunakan Docker untuk Mac dan DefaultDockerClient.fromEnv()
, mungkin tidak jelas nilai apa yang akan digunakan untuk variabel lingkungan DOCKER_HOST
. Nilai yang harus Anda gunakan adalah DOCKER_HOST=unix:///var/run/docker.sock
, setidaknya pada versi 1.11.1-beta11.
Pada versi 4.0.8 dari docker-client, DefaultDockerClient.fromEnv()
menggunakan unix:///var/run/docker.sock
di OS X secara default.
Jika Anda menjalankan buruh pelabuhan versi terbaru (>= 1.12), yang berisi dukungan gerombolan buruh pelabuhan asli, pastikan Anda menjalankan docker swarm init
untuk menginisialisasi gerombolan buruh pelabuhan.
Pastikan daemon Docker berjalan dan Anda dapat melakukan docker ps
.
Anda dapat menjalankan tesnya sendiri dengan mvn test
. Perhatikan bahwa pengujian memulai dan menghentikan sejumlah besar container, sehingga daftar container yang Anda lihat dengan docker ps -a
akan mulai menjadi cukup panjang setelah banyak pengujian dijalankan. Anda mungkin merasa terbantu jika sesekali menerbitkan docker rm $(docker ps -aq)
.
Komit ke cabang master akan memicu agen integrasi berkelanjutan kami untuk membuat jar dan merilis dengan mengunggah ke Sonatype. Jika Anda adalah pengelola proyek dengan kredensial yang diperlukan, Anda juga dapat membangun dan merilis secara lokal dengan menjalankan perintah di bawah ini.
mvn clean [-DskipTests -Darguments = -DskipTests] -Dgpg.keyname= < key ID used for signing artifacts > release:prepare release:perform
Harap dicatat bahwa dalam rilis 2.7.6 dan sebelumnya, artefak default adalah versi yang diarsir. Saat memutakhirkan ke versi 2.7.7, Anda perlu menyertakan pengklasifikasi berbayang jika Anda mengandalkan dependensi berbayang di toples klien buruh pelabuhan.
Standar:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< version >3.5.12 version >
dependency >
Berbayang:
< dependency >
< groupId >com.spotify groupId >
< artifactId >docker-client artifactId >
< classifier >shaded classifier >
< version >3.5.12 version >
dependency >
Hal ini sangat penting jika Anda menggunakan Jersey 1.x dalam proyek Anda. Untuk menghindari konflik dengan klien buruh pelabuhan dan Jersey 2.x, Anda perlu secara eksplisit menentukan versi yang diarsir di atas.
Proyek ini mematuhi Kode Etik Terbuka. Dengan berpartisipasi, Anda diharapkan menghormati kode ini.