How To Install Docker Compose on Ubuntu 18.04

Docker-Compose

כפי שכבר ציינתי במאמר הקודם בנושא, ה 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):
Docker Compose Version

 

כעת כתבו את הפקודה הבאה:

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 containers - מתוך הבלוג של תומר קליין

 

לוגים:

על מנת לצפות בלוגים של הקונטיינרים נשתמש בפקודה הבאה:

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 וכיצד להשתמש בו.

בהצלחה,

1 Trackback / Pingback

  1. Install Chrony NTP Server using Docker-Compose - DockerIL

Leave a Reply

כתובת האימייל שלך לא תפורסם


*