העגנת יישום אתחול האביב

1. סקירה כללית

במאמר זה נתמקד כיצד לעגן a יישום אתחול האביב להפעיל אותו בסביבה מבודדת, ע.ק. מְכוֹלָה.

יתר על כן, נראה כיצד ליצור קומפוזיציה של מכולות, התלויות זו בזו ומקושרות זו בזו ברשת וירטואלית פרטית. נראה גם כיצד ניתן לנהל אותם יחד עם פקודות בודדות.

נתחיל ביצירת תמונת בסיס מאופשרת בג'אווה וקלת משקל אלפיני לינוקס.

2. Buildpacks תמיכה באביב אתחול 2.3

Spring Boot 2.3 הוסיף תמיכה ב buildpacks. במילים פשוטות, במקום ליצור Dockerfile משלנו ולבנות אותה באמצעות משהו כמו לבנות דוקרכל שעלינו הוא להוציא את הפקודה הבאה:

$ ./mvnw spring-boot: build-image

או ב- Gradle:

$ ./gradlew bootBuildImage

המניע העיקרי מאחורי buildpacks הוא ליצור את אותה חווית פריסה שמספקים כמה שירותי ענן ידועים כמו Heroku או Cloud Foundry לזמן מה.. אנחנו פשוט מנהלים את תמונה לבנות המטרה והפלטפורמה עצמה דואגת לבנות ולפרוס את החפץ.

יתר על כן, זה יכול לעזור לנו לשנות את הדרך בה אנו בונים תמונות Docker בצורה יעילה יותר. במקום להחיל את אותו שינוי על הרבה Dockerfiles בפרויקטים שונים, כל שעלינו לעשות הוא לשנות או לכוון את בונה התמונות של buildpacks.

בנוסף לנוחות השימוש וחוויית מפתח כללית טובה יותר, היא יכולה להיות יעילה יותר. למשל, גישת ה- buildpacks תיצור תמונת Docker שכבתית ומשתמשת בגרסה המפוצצת של קובץ ה- Jar.

3. תמונת בסיס משותפת

אנחנו הולכים להשתמש של דוקר פורמט קובץ בנייה משלו: א קובץ Docker.

א קובץ Docker הוא באופן עקרוני, קובץ אצווה בשורה, המכיל פקודות לבניית תמונה. זה לא הכרחי להכניס את הפקודות האלה לקובץ, כי אנחנו יכולים להעביר אותן גם לשורת הפקודה - קובץ פשוט יותר נוח.

אז בואו נכתוב את הראשון שלנו קובץ Docker:

FROM alpine: edge MAINTAINER baeldung.com RUN apk add --no-cache openjdk8 קבצי העתקה / UnlimitedJCEPolicyJDK8 / * \usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
  • מ: מילת המפתח מ, מספר דוקר להשתמש בתמונה נתונה עם התג שלה כבסיס בסיס. אם תמונה זו אינה נמצאת בספריה המקומית, חיפוש מקוון פועל DockerHub, או בכל רישום מרחוק מוגדר אחר, מבוצע
  • מטפלת: א מטפלת היא בדרך כלל כתובת דוא"ל, המזהה את מחבר התמונה
  • לָרוּץ: עם ה לָרוּץ פקודה, אנו מבצעים שורת פקודה מעטפת בתוך מערכת היעד. כאן אנו משתמשים אלפיני לינוקס מנהל אריזה apk להתקנת ה- Java 8 OpenJDK
  • עותק: הפקודה האחרונה מספרת דוקר ל עותק כמה קבצים ממערכת הקבצים המקומית, במיוחד תיקיית משנה לספריית ה- build, לתמונה בנתיב נתון

דרישות: על מנת להריץ את ההדרכה בהצלחה, עליך להוריד את ה- Java Cryptography Extension (JCE) קבצי מדיניות שיפוט חוזק ללא הגבלה מ נבואה. כל שעליך לעשות הוא לחלץ את הארכיון שהורדת לתיקיה מקומית בשם 'קבצים'.

כדי לבנות סוף סוף את התמונה ולאחסן אותה בספריה המקומית, עלינו להפעיל:

docker build --tag = alpine-java: base --rm = true.

הודעה: ה -תָג אפשרות תתן לתמונה את שמה ו- –Rm = נכון יסיר תמונות ביניים לאחר שנבנו בהצלחה. התו האחרון בפקודת מעטפת זו הוא נקודה, הפועלת כטיעון build-directory.

4. Dockerize יישום אתחול קפיץ עצמאי

כדוגמה ליישום בו נוכל לעגון, ניקח את ה- spring-cloud-config / server מתוך מדריך תצורת ענן האביב. כצעד הכנה, עלינו להרכיב קובץ צנצנות הניתן לריצה ולהעתיק אותו לשלנו דוקר ספריית build:

מדריכים $> cd spring-cloud-config / server server $> mvn package-boot: repackage server $> cp target / server-0.0.1-SNAPSHOT.jar \ ../../spring-boot-docker/files /config-server.jar שרת $> cd ../../spring-boot-docker

עכשיו ניצור א קובץ Docker נקרא Dockerfile.server עם התוכן הבא:

FROM alpine-java: Base MAINTAINER baeldung.com קבצי COPY / spring-cloud-config-server.jar / opt / spring-cloud / lib / COPY files / spring-cloud-config-server-entrypoint.sh / opt / spring- ענן / bin / ENV SPRING_APPLICATION_JSON = \ '{"אביב": {"ענן": {"config": {"שרת": \ {"git": {"uri": "/ var / lib / spring-cloud / config-repo ", \" clone-on-start ": true}}}}}} 'ENTRYPOINT [" / usr / bin / java "] CMD [" -jar "," / opt / spring-cloud / lib / spring-cloud-config-server.jar "] VOLUME / var / lib / spring-cloud / config-repo EXPOSE 8888
  • מ: כבסיס לתדמיתנו ניקח את ג'אווהמופעל אלפיני לינוקס, נוצר בחלק הקודם
  • עותק: אנחנו נתנו דוקר העתק את קובץ הצנצנת שלנו לתמונה
  • ENV: פקודה זו מאפשרת לנו להגדיר כמה משתני סביבה, אשר יכובדו על ידי היישום הפועל במיכל. כאן אנו מגדירים התאמה אישית יישום אתחול האביב תצורה, כדי למסור את ההפעלה של הצנצנת מאוחר יותר
  • נקודת כניסה/CMD: זה יהיה ההפעלה שתתחיל כאשר האתחול של המכולה. עלינו להגדיר אותם כ JSON-Array, כי נשתמש ב- נקודת כניסה בשילוב עם א CMD עבור כמה טיעוני יישום
  • כרך: מכיוון שהמכולה שלנו תפעל בסביבה מבודדת, ללא גישה ישירה לרשת, עלינו להגדיר מציין מיקום-נקודה למאגר התצורה שלנו.
  • לַחשׂוֹף: הנה אנחנו מספרים דוקר, באיזה נמל רושמת היישום שלנו. יציאה זו תפורסם למארח כאשר המכולה יופעל

ליצור תמונה משלנו קובץ Dockerאנחנו צריכים לרוץ 'בניית דוקר', כמו קודם:

$> build docker - file = Dockerfile.server \ --tag = config-server: האחרון --rm = true.

אבל לפני שאנחנו הולכים להפעיל מיכל מהתמונה שלנו, עלינו ליצור נפח להתקנה:

$> נפח העגינה ליצור - שם = spring-cloud-config-repo

הודעה: אמנם לא ניתן לשנות את המכולה, אך כאשר הוא לא מחויב לתמונה לאחר יציאת היישום, הנתונים המאוחסנים בנפח יהיו עקביים על פני מספר מכולות.

לבסוף, אנו מסוגלים להריץ את המכולה מהתמונה שלנו:

$> הפעלת docker --name = config-server --publish = 8888: 8888 \ --volume = spring-cloud-config-repo: / var / lib / spring-cloud / config-repo \ config-server: האחרון
  • ראשית, עלינו -שֵׁם המכולה שלנו. אם לא, אחד ייבחר אוטומטית
  • ואז, אנחנו חייבים -לְפַרְסֵם הנמל החשוף שלנו (ראה קובץ Docker) לנמל במארח שלנו. הערך ניתן בטופס 'Host-port: container-port'. אם ניתן רק יציאת מכולה, ישמש יציאת מארח שנבחרה באופן אקראי. אם נשאיר אפשרות זו בחוץ, המכולה תהיה מבודדת לחלוטין
  • ה -כרך אפשרות נותנת גישה לספריה במארח (כאשר משתמשים בה עם נתיב מוחלט) או לספריה שנוצרה בעבר דוקר נפח (כאשר משתמשים בו עם כרך-שם). הנתיב אחרי המעי הגס מציין את נקודת הר בתוך המכולה
  • כטיעון עלינו לספר דוקר, באיזו תמונה להשתמש. כאן עלינו לתת את שם תמונה מהקודם 'לבנות דוקר' שלב
  • כמה אפשרויות שימושיות יותר:
    • -זה - הפעל מצב אינטראקטיבי והקצה א פסאודו-טי
    • - התנתק מהמיכל לאחר האתחול

אם נפעיל את המיכל במצב מנותק, נוכל לבדוק את פרטיו, לעצור אותו ולהסירו באמצעות הפקודות הבאות:

$> דוקר בודק שרת תצורה $> שרת תצורת עצירה של דוקר $> שרת תצורה של דוקר rm

5. Dockerize יישומים תלויים במורכב

דוקר פקודות ו Dockerfiles מתאימים במיוחד ליצירת מכולות בודדות. אבל אם אתה רוצה פועלים ברשת של יישומים מבודדים, ניהול המכולות הופך במהירות עמוס.

כדי לפתור את זה, דוקר מספק כלי בשם Docker Compose. זה מגיע עם קובץ build פנימי יאמל פורמט ומתאים יותר לניהול מספר מכולות. לדוגמה, הוא מסוגל להפעיל או לעצור תרכובת שירותים בפקודה אחת, או למזג את פלט הרישום של מספר שירותים יחד לאחד פסאודו-טי.

בואו לבנות דוגמה לשני יישומים הפועלים במכולות Docker שונות. הם יתקשרו זה עם זה ויוצגו כ"יחידה אחת "למערכת המארחת. אנו נבנה ונעתיק את spring-cloud-config / client דוגמה המתוארת במדריך תצורת ענן האביב שלנו קבצים כמו שעשינו בעבר עם שרת תצורה.

זה יהיה שלנו docker-compose.yml:

גרסה: '2' שירותים: config-server: container_name: config-server build: context:. dockerfile: תמונה של Dockerfile.server: שרת תצורה: חשיפה אחרונה: - 8888 רשתות: - אמצעי אחסון של ענן-אביב: - ענן-אביב-ענן-תצורה: / var / lib / אביב-ענן / רישום תצורה-ריפו: מנהל : json-file config-client: container_name: config-client build: context:. dockerfile: Dockerfile.client image: config-client: נקודת הכניסה האחרונה: /opt/spring-cloud/bin/config-client-entrypoint.sh סביבה: SPRING_APPLICATION_JSON: \ '{"spring": {"cloud": \ {"config ": {" uri ":" // config-server: 8888 "}}} 'expose: - 8080 יציאות: - 8080: 8080 רשתות: - קישורי רשת-אביב-ענן: - config-server: config-server depends_on : - רישום שרת תצורה: מנהל התקן: רשתות קבצי json: רשת ענן-אביב: מנהל התקן: נפחי גשר: ענן-אביב-תצורה-ריפו: חיצוני: נכון
  • גִרְסָה: מציין באיזו גרסת פורמט יש להשתמש. זהו שדה חובה. כאן אנו משתמשים בגרסה החדשה יותר, ואילו פורמט מורשת הוא '1'
  • שירותים: כל אובייקט במפתח זה מגדיר א שֵׁרוּת, מיכל a.k.a. סעיף זה הוא חובה
    • לִבנוֹת: אם ניתן, docker-compose מסוגל לבנות תמונה מ- קובץ Docker
      • הֶקשֵׁר: אם ניתן, הוא מציין את ספריית build, היכן ה- קובץ Docker הוא מביט למעלה
      • קובץ dockerfile: אם ניתן, הוא מגדיר שם חלופי עבור a קובץ Docker
    • תמונה: מספר דוקר איזה שם עליו לתת לתמונה כאשר משתמשים בתכונות build. אחרת, הוא מחפש תמונה זו בספריה או רישום מרחוק
    • רשתות: זהו המזהה של הרשתות שצוינו לשימוש. נתינה שם-ערך חייב להיות רשום ב רשתות סָעִיף
    • כרכים: זה מזהה את הכרכים שצוינו לשימוש ואת נקודות ההר להרכבת הכרכים, מופרדות על ידי נקודתיים. כמו כן ב רשתות קטע כרך-שם חייב להיות מוגדר בנפרד כרכים סָעִיף
    • קישורים: פעולה זו תיצור קישור רשת פנימי בין זֶה השירות והשירות המופיע ברשימה. זֶה השירות יוכל להתחבר לשירות המופיע ברשימה, לפיו החלק שלפני המעי הגס מציין א שם השירות מ ה שירותים החלק והחלק אחרי המעי הגס מציין את שם המארח בו השירות מאזין ביציאה חשופה
    • תלוי ב: זה אומר דוקר כדי להפעיל שירות בלבד, אם השירותים הרשומים החלו בהצלחה. הודעה: זה עובד רק ברמת מכולה! לעקיפת הבעיה כדי להתחיל את התלוי יישום ראשית, ראה config-client-entrypoint.sh
    • רישום: כאן אנו משתמשים ב- 'קובץ json' מנהל ההתקן, שהוא ברירת המחדל. לחלופין 'סיסלוג' עם אפשרות כתובת נתונה או 'אף אחד' יכול לשמש
  • רשתות: בחלק זה אנו מציינים את רשתות זמין לשירותים שלנו. בדוגמה זו, אנו מאפשרים docker-compose צור שם רֶשֶׁת מהסוג 'לְגַשֵׁר' בשבילנו. אם האפשרות חיצוני נקבע ל נָכוֹן, הוא ישתמש בשם קיים עם השם הנתון
  • כרכים: זה דומה מאוד ל- רשתות סָעִיף

לפני שנמשיך, נבדוק אם קיימים טעויות תחביר בקובץ ה- build שלנו:

$> תצורה של docker-compose

זה יהיה שלנו Dockerfile.client לבנות את config-client תמונה מתוך. זה שונה מה- Dockerfile.server בכך שאנחנו מתקינים בנוסף OpenBSD netcat (הדרוש בשלב הבא) והכין את נקודת כניסה הפעלה:

מאת alpine-java: בסיס MAINTAINER baeldung.com RUN apk - no-cache add netcat-openbsd COPY files / config-client.jar / opt / spring-cloud / lib / COPY files / config-client-entrypoint.sh / opt / spring-cloud / bin / RUN chmod 755 /opt/spring-cloud/bin/config-client-entrypoint.sh

וזה יהיה המותאם אישית נקודת כניסה בשביל שלנו שירות config- לקוח. כאן אנו משתמשים netcat בלולאה כדי לבדוק אם שלנו שרת תצורה מוכן. אתה צריך לשים לב שאנחנו יכולים להגיע לשלנו שרת תצורה לפי שלה שם קישור, במקום כתובת IP:

#! / bin / sh בזמן! שרת התצורה nc -z 8888; לעשות הד "מחכה לשרת Config הקרוב" שינה 2 נעשה java -jar /opt/spring-cloud/lib/config-client.jar

לבסוף, אנו יכולים לבנות את התמונות שלנו, ליצור את המכולות המוגדרות ולהתחיל אותן בפקודה אחת:

$> docker-compose up - build

כדי לעצור את המכולות, הסר אותם מ דוקר והסר את המחובר רשתות ו כרכים ממנו נוכל להשתמש בפקודה ההפוכה:

$> docker-compose למטה

תכונה נחמדה של docker-compose האם ה יכולת להרחיב את השירותים. לדוגמא, אנו יכולים לדעת דוקר להפעיל מכולה אחת עבור שרת תצורה ושלושה מכולות עבור config-client.

אבל כדי שזה יעבוד כמו שצריך, עלינו להסיר את container_name משלנו docker-compose.yml, בשביל לתת דוקר בחר אחד ועלינו לשנות את תצורת יציאה חשופה, כדי למנוע עימותים.

לאחר מכן, אנו מסוגלים לשנות את גודל השירותים שלנו כך:

$> docker-compose build $> docker-compose up -d $> docker-compose scale config-server = 1 config-client = 3

6. מסקנה

כפי שראינו, כעת אנו יכולים לבנות מותאמים אישית דוקר תמונות, מריצות א יישום אתחול האביב כ דוקר מיכל, ויצירת מכולות תלויות עם docker-compose.

לקריאה נוספת אודות קבצי ה- build אנו מתייחסים לפקיד הפניה ל- Dockerfile וה התייחסות docker-compose.yml.

כרגיל, ניתן למצוא את קודי המקור להדרכה זו על גיתוב.