Spotify ไม่ใช้เวอร์ชันล่าสุดของโปรเจ็กต์นี้เป็นการภายในอีกต่อไป เวอร์ชันของ docker-client ที่เราใช้คือเวอร์ชันที่ helios มีอยู่ใน pom.xml At this point, we're not developing or accepting new features or even fixing non-critical bugs. อย่าลังเลที่จะแยก repo นี้
นี่คือไคลเอ็นต์ Docker ที่เขียนด้วยภาษา Java มันถูกใช้ในระบบการผลิตที่สำคัญมากมายที่ Spotify
docker-client ถูกสร้างและทดสอบกับ Docker รุ่นรอง 6 รุ่นล่าสุด ตอนนี้คือ 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 ();
If you're looking for how to use docker-client, see the User Manual. หากคุณกำลังมองหาวิธีสร้างและพัฒนา โปรดอ่านต่อ
docker-client ควรสามารถสร้างได้บนแพลตฟอร์มใดๆ ที่มี Docker 1.6+, JDK8+ และ Maven 3 เวอร์ชันล่าสุด
หากคุณใช้ Docker for 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) ซึ่งมีการสนับสนุน Native Swarm โปรดตรวจสอบให้แน่ใจว่าคุณได้เรียกใช้ docker swarm init
เพื่อเริ่มต้น docker swarm
ตรวจสอบให้แน่ใจว่า Docker daemon กำลังทำงานอยู่และคุณสามารถทำ 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 และก่อนหน้านั้น อาร์ติแฟกต์เริ่มต้นจะเป็นเวอร์ชันแรเงา When upgrading to version 2.7.7, you will need to include the shaded classifier if you relied on the shaded dependencies in the docker-client jar.
มาตรฐาน:
< 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 คุณจะต้องระบุเวอร์ชันที่แรเงาด้านบนอย่างชัดเจน
โครงการนี้ปฏิบัติตามหลักจรรยาบรรณแบบเปิด ในการเข้าร่วม คุณจะต้องปฏิบัติตามรหัสนี้