لم يعد 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 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 بشكل افتراضي.
إذا كنت تقوم بتشغيل إصدار حديث من عامل الإرساء (>= 1.12)، والذي يحتوي على دعم سرب أصلي، فيرجى التأكد من تشغيل docker swarm init
لتهيئة سرب عامل الإرساء.
تأكد من تشغيل Docker daemon وأنه يمكنك القيام docker ps
.
يمكنك إجراء الاختبارات بنفسك باستخدام mvn test
. لاحظ أن الاختبارات تبدأ وتوقف عددًا كبيرًا من الحاويات، وبالتالي فإن قائمة الحاويات التي تراها مع docker ps -a
ستبدأ في الازدياد بعد العديد من عمليات التشغيل الاختبارية. قد تجد أنه من المفيد أحيانًا إصدار docker rm $(docker ps -aq)
.
سيؤدي الالتزام بالفرع الرئيسي إلى تشغيل وكيل التكامل المستمر الخاص بنا لإنشاء الجرة وإصدارها عن طريق التحميل إلى Sonatype. إذا كنت مشرفًا على المشروع ولديك بيانات الاعتماد اللازمة، فيمكنك أيضًا الإنشاء والإصدار محليًا عن طريق تشغيل ما يلي.
mvn clean [-DskipTests -Darguments = -DskipTests] -Dgpg.keyname= < key ID used for signing artifacts > release:prepare release:perform
يرجى ملاحظة أنه في الإصدارات 2.7.6 والإصدارات السابقة، كان العنصر الافتراضي هو الإصدار المظلل. عند الترقية إلى الإصدار 2.7.7، ستحتاج إلى تضمين المصنف المظلل إذا كنت تعتمد على التبعيات المظللة في جرة عميل الإرساء.
معيار:
< 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، ستحتاج إلى تحديد الإصدار المظلل أعلاه بشكل صريح.
يلتزم هذا المشروع بمدونة قواعد السلوك المفتوحة. من خلال المشاركة، يتوقع منك احترام هذا الرمز.