כפי שכבר ציינתי במאמר הקודם בנושא, ה Docker הוא כלי נהדר המשמש לאוטומציה של פריסת אפליקציות מבוססות לינוקס באמצעות "מכולות תוכנה", אך אם נרצה לממש את הפוטנציאל המלא של היכולות נמצטרך להריץ כל רכיב של האפליקציה הקונטיינר משלה. באפליקציות מורכבות אשר דורשות תזמונים ותלויות כמו למשל זמן וסדר טעינה של קונטיינרים המכילים שירותים של אותה אפליקציה או כיבויין במקביל התפעול עלול להפוך למורכב ומסורבל.
בדיוק לשם כך פיתחה קהילת הדוקר כלי ניהול פופלרי הנקרא Fig המאפשר שימוש בקובץ yaml בודד לצורך ניהול יעיל של כל הקונטיינרים והקונפיגורציות שלהם. הפתרון נהיה כל כך פופולרי בקרב המשתמשים עד כדי כך שהוביל את הקהילה לפתח את Docker Compose המבוסס על המקור של Fig. השימוש ב Docker Compose מפשט את התהליכים הנחוצים לצורך הקמת סביבה מרובת קונטיינרים ואפליקציות כלל הקמה, אתחולף כיבוי וכן קישוריות פנימיות בין קונטיינרים.
במדריך זה אסביר כיצד ניתן להתקין את Docker Compose על גבי שרת ubuntu 18.
שלב א – התקנת Docker על גבי Ubuntu
על מנת שנוכל להשתמש ב Docker Compose יש להתקין תחילה את Docker עליו ירוצו הקונטיינרים שנגדיר ב Docker Compose.
תחילה נתקין את התלויות הנחוצות להתקנה ולתפקוד התקין של Docker:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
וכעת נוסיף את מפתח ה GPG המאמת את המאגר שזה עתה הוספנו:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
עכשיו, אחרי שהתקנו את התלויות והוספנו את מפתח האימות של המאגר, נוסיף את המאגר עצמו לרשימת המאגרים של המערכת:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
ונבצע עדכון לרשימת החבילות:
sudo apt-get update
אם לא נתקלתם בשגיאות עד כה (לא הייתם אמורים אם פעלתם בדיוק לפי ההוראות) אפשר לעבור לשלב האחרון והוא התקנת ה Docker עצמו על פי הפקודה הבאה::
sudo apt-get install docker-ce
שלב ב- התקנת Docker Compose:
כעת נעבור להתקנת ה Docker Compose. תחילה, גשו לכתובת הבאה ואתרו את הגרסה האחרונה של Docker Compose (בעת כתיבת המדריך הגרסה האחרונה היא 1.23.2):
כעת כתבו את הפקודה הבאה:
sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
החליפו את מספר הגרסה באחרונה ששוחררה. לאחר הורדת הקובץ יש להעניק לו הרשאות ריצה על ידי הפקודה הבאה:
sudo chmod +x /usr/local/bin/docker-compose
הרצה וניהול קונטיינרים של docker דורשים הרשאות sudo מה שאומר שבתחילת כל פקודה יש לכתוב sudo או לעבור לחשבון root. ניתן לעקוף את זה על ידי הוספת המשתמש הנוכחי לקבוצת הדוקר על ידי הפקודה הבאה:
sudo usermod -aG docker ${USER}
בשלב הבא נגדיר מספר משתני סביבה כמו איזור זמן ועוד אשר יעזרו לנו בהמשך להמנע משכפול הגדרות וכן יכולת לנהל את השינויים מקום אחד מרכזי. לצורך כך נערוך את קובץ משתני הסביבה על ידי הפקודה הבאה:
sudo nano /etc/environment
העתיקו פנימה את הטקסט הבא:
PUID=1000 PGID=140 TZ="America/New_York" USERDIR="/home/USER" MYSQL_ROOT_PASSWORD="passsword"
כאשר:
- PUID מציין את ה ID של המשתמש שישמש להרצת האפליקציות.
- PGID מציין את ה ID של קבוצת ה docker.
את שני הנתונים האלה ניתן לקבל על ידי הרצת הפקודה:
id
בנוסף יש את:
- TZ המציין את איזור הזמן, לדוגמה Asia/Jerusalem.
- USERDIR הנתיב לתיקיית הבית של המשתמש הנוכחי.
- MYSQL_ROOT_PASSWORD – ישמש עבור הגדרת סיסמת root עבור MySQL/MariaDB וכן ל phpMyadmin.
את ההפניה למשתנים אלה נוכל לעשות על ידי השימוש ב {} בקובץ ההגדרות של docker compose.
תיקיות ה Docler וההרשאות:
לצורך פשטות ההדגמה יצרתי תיקייה בשם docker תחת תיקיית הבית שלי על ידי הפקודה:
mkdir ~/docker
כעת נעניק לתיקיה את ההרשאות המתאימות וזאת על מנת למנוע בעיית הרשאות שעלולה לצוץ בהמשך, לצורך כך כתבו את הפקודות הבאות ברצף"
sudo setfacl -Rdm g:docker:rwx ~/docker sudo chmod -R 775 ~/docker
התחלת עבודה עם Docker Compose:
סוף סוף אפשר להתחיל להגדיר קונטיינרים, ונעשה זאת על ידי יצירת קובץ yaml באמצעות הפקודה הבאה:
nano ~/docker/docker-compose.yml
כעת הדביקו פנימה את הטקסט הבא:
version: "3.6" services:
השימוש ב version מורה ל docker compose באיזה גרסאת תחביר להשתמש.
בכל שלב ניתן ללחוץ על ctrl+x >>y >>enter על מנת לשמור את הקובץ ולצאת מהעורך.
טעינה ואתחול קונטיינרים באמצעות Docker Compose:
בחלק זה של המדריך נעבור על מספר פקודות שימושיות אשר יעזרו לנו עם ההגדרות והניטור של הקונטיינרים והאפליקציות השונות. היות ובשלב זה של המדריך לא קיימים קונטיינרים יתכן ויתקבלו שגיאות בחלק מהפקודות. המלצתי היא שלמרות שאין קונטיינרים פעילים וכן הגדרות של כאלה בקובץ ה yaml עדיין תריצו את הפקודה על מנת לוודא כי ה docker וכן docker compose עובדים בצורה תקינה. לצורך כך הריצו תחילה את הפקודה הבאה:
docker-compose -f ~/docker/docker-compose.yml up -d
כאשר השימוש ה -d מבצע את הריצה ברקע ומונע הצגת לוגים בזמן הריצה.
צפיה ברשימת הקונטיינרים:
בכל שלב, ניתן לראות את רשימת הקונטיינרים אשר רצים במערכת (ולמשך כמה זמן) וכמה מהם לא רצים כאשר העמודה האחרונה היא השם שניתן לקונטיינר. לצורך כך הריצו את הפקודה הבאה:
docker ps -a
הפלט שתקבלו יראה כך:
לוגים:
על מנת לצפות בלוגים של הקונטיינרים נשתמש בפקודה הבאה:
docker logs pihole
הפעלה / כיבוי של קונטיינרים באמצעות Docker Compose:
על מנת לעצור קונטיינר ניתן להשתמש בפקודה:
docker-compose stop CONTAINER-NAME
- החליפו את CONTAINER-NAME בשם הקונטיינר אותו תרצו לעצור.
- החליפו את stop ב start על מנת להפעיל קונטיינר.
על מנת לעצור קונטיינרים ולהסיר את כל המשאבים שלהם כמו רשתות, ווליומים ועוד ניתן להשתמש בקובץ ה docker-compose.yaml בצורה הבאה:
docker-compose -f ~/docker/docker-compose.yml down
ניקוי משאבים שאינם בשימוש:
זכרו שאחת היתרונות החשובים של שימוש ב docker היא שלא משנה עד כמה תתקינו, תסירו ותשחקו עם קונטיינרים יהיה קשה מאוד לפגוע במערכת ההפעלה המארחת. אך לעיתים, עם הזמן נשארות שאריות כמו ווליומים ואימאג'ים שאינם נמחקים. ניתן להתמודד עם זה על ידי הרצת סקריפטים לניקוי משאבים שאינם בשימוש. את הסקריפטים האלה תוכלו להריץ בכל רגע נתון היות והם נוגעים אך ורק למשאבים שאינם נמצאים בשימוש או משוייכים לקונטיינר פעיל:
docker sytem prune docker image prune docker volume prune
הקמת Container ניהול:
ההמלצה שלי, במיוחד עבור מתחילים אך גם עבור משתמשים מנוסים יותר היא להתקין Container בשם Protainer אשר מאפשר ניהול נוח של הקונטיינרים והמשאבים השונים דרך ממשק אינטרנטי קליל ונוח לשימוש.
בחלק זה של המדריך אסביר איך ניתן להתקין את Portainer באמצעות קובץ Docker Compose. לצורך כך פתחו לעריכה את הקובץ שיצרנו בשלב הקודם של המדריך:
sudo nano ~/docker/docker-compose.yaml
והדביקו פנימה את הטקסט הבא:
portainer: image: portainer/portainer container_name: portainer restart: always command: -H unix:///var/run/docker.sock ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock - ${USERDIR}/docker/portainer/data:/data - ${USERDIR}/docker/shared:/shared environment: - TZ=${TZ}
ככה שבתוספת שתי השורות המקוריות בקובץ הוא אמור להיראות כך:
version: "3.6" services: portainer: image: portainer/portainer container_name: portainer restart: always command: -H unix:///var/run/docker.sock ports: - "9000:9000" volumes: - /var/run/docker.sock:/var/run/docker.sock - ${USERDIR}/docker/portainer/data:/data - ${USERDIR}/docker/shared:/shared environment: - TZ=${TZ}
שמרו את הקובץ וצאו מהעורך.
כעת נתקין את הקונטיינר עצמו על ידי שימוש בפקודת docker-compose בצורה הבאה:
docker-compose -f ~/docker/docker-compose.yaml up -d
במדריך הבא תוכלו לקרוא אודות ה Portainer וכיצד להשתמש בו.
בהצלחה,
Leave a Reply