מחולל daemon.json ל-Docker

בוחרים הגדרות ומקבלים daemon.json ש-dockerd מקבל, הסבר לכל מפתח ואת הפקודות שמחילות אותו בבטחה. הכול נכתב בדפדפן שלכם.

‏json-file הוא ברירת המחדל של Docker ומה ש-docker logs קורא; ‏local חסכוני יותר. שניהם עוברים רוטציה לפי שתי ההגדרות שלידו.
מספר עם k, ‏m או g. ברירת המחדל של Docker היא בלי הגבלה.
כמה קבצים נשמרים לכל קונטיינר, כולל הקובץ הנוכחי.
‏pool אחד בכל שורה: base וגודל רשת, למשל 10.200.0.0/16 24. ריק משאיר את ה-pools המובנים של Docker ‏(172.17–172.31 ו-192.168).
הכתובת של ה-bridge עצמו עם ה-prefix, למשל 10.199.0.1/24. ריק: ‏Docker בוחר.
קונטיינרים ממשיכים לרוץ בזמן הפעלה מחדש או שדרוג של ה-daemon. נכנס לתוקף אחרי ההפעלה מחדש הראשונה איתו.
בלי ערך Docker בוחר, ובמערכות עדכניות זה overlay2. מגדירים רק כדי לקבע את ברירת המחדל הזאת.
כתובת ופורט ל-metrics של Prometheus, למשל 127.0.0.1:9323. ריק: כבוי.
כתובת https://‎ אחת בכל שורה. משיכות מ-Docker Hub מנסות קודם את ה-mirrors וחוזרות ל-Docker Hub.
טווח אחד בכל שורה, למשל 192.168.1.0/24. משמש רק לאזהרה על חפיפות; הטווחים נשארים בעמוד הזה.

קובץ ה-daemon.json שלכם

daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

החלה

  1. גיבוי הקובץ הנוכחי, אם יש כזה.
  2. התקנת הקובץ החדש עם הבעלות וההרשאות הנכונות.
  3. בדיקה עם dockerd --validate לפני ההפעלה מחדש: קובץ ש-dockerd דוחה ימנע מ-Docker לעלות.
  4. הפעלה מחדש של Docker. קונטיינרים שרצים נעצרים ועולים שוב, אלא אם live-restore כבר היה פעיל לפני ההפעלה הזאת.
  5. בדיקה שההגדרות בתוקף. הגדרות לוגים ורשת חלות על קונטיינרים ורשתות שנוצרים אחרי ההפעלה מחדש; את האחרים יוצרים מחדש (docker compose up -d --force-recreate).
apply-commands.txt
[ ! -f /etc/docker/daemon.json ] || sudo cp -p /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo install -m 0644 -D daemon.json /etc/docker/daemon.json
sudo dockerd --validate --config-file /etc/docker/daemon.json
sudo systemctl restart docker
docker info --format '{{.LoggingDriver}} {{.Driver}} live-restore={{.LiveRestoreEnabled}}'

חזרה לאחור: sudo mv /etc/docker/daemon.json.bak /etc/docker/daemon.json && sudo systemctl restart docker.

לא בטוחים אילו טווחים מתנגשים? בדקו את ה-LAN וה-VPN מול הרשתות של Docker

מה הכלי עושה

הכלי כותב את ‎/etc/docker/daemon.json, הקובץ ש-dockerd קורא בעלייה, לשרת Linux: רוטציית לוגים כדי שלוגים של קונטיינרים לא ימלאו את הדיסק, טווחי כתובות שמרחיקים את הרשתות של Docker מה-LAN וה-VPN שלכם, ‏live-restore, ה-storage driver, ‏registry mirrors ו-endpoint של metrics. כל מפתח מוסבר, והעמוד נותן את הפקודות שמחילות אותו בבטחה.

איך זה עובד

  1. הקובץ נכתב בדפדפן שלכם על ידי @anaroq/linux, המנוע של כלי ה-Linux האחרים שלנו. מפתח שלא הגדרתם לא נכתב, ו-Docker שומר עליו את ברירת המחדל שלו.
  2. ערך ש-dockerd היה דוחה, כמו pool שאינו טווח, ‏pools חופפים או mirror עם נתיב, נדחה ליד השדה במקום להיכתב.
  3. אותם קבצים עוברים dockerd --validate בבדיקות שלנו, שטוען הגדרות בדיוק כמו ה-daemon בעלייה.

מה כל מפתח עושה

log-driver ו-log-opts
לאן הולך הפלט של קונטיינרים ומתי הקובץ עובר רוטציה: ‏max-size לקובץ, ‏max-file קבצים שנשמרים. בלעדיהם לוגים של json-file גדלים עד שהדיסק מתמלא.
storage-driver
איך שכבות של images נשמרות. ‏overlay2 הוא ברירת המחדל המתועדת של Docker; שינוי שלו בשרת עם נתונים מסתיר images וקונטיינרים קיימים.
default-address-pools
הטווחים ש-Docker חותך מהם רשתות: ‏base הוא ה-pool, ‏size הוא ה-prefix של כל רשת. הם מחליפים את ה-pools המובנים 172.17–172.31 ו-192.168.
bip
הכתובת של ה-bridge הראשי docker0 עם ה-prefix. כשהוא מחוץ ל-pools, ה-pools נשארים שלמים לרשתות שלכם.
registry-mirrors
מטמוני pull-through ל-images מ-Docker Hub. ‏Docker מנסה אותם לפי הסדר וחוזר ל-Docker Hub.
live-restore
קונטיינרים ממשיכים לרוץ כש-dockerd למטה להפעלה מחדש או לשדרוג. לא תואם ל-Swarm mode.
metrics-addr
מגיש metrics של ה-daemon ל-Prometheus ב-‎/metrics, בלי אימות. השאירו על 127.0.0.1, אלא אם שרת הניטור צריך גישה.

דוגמה

שרת עם רוטציית לוגים, ‏pools ב-10.210.0.0/16 ו-bridge ב-10.209.0.0/24, ‏live-restore, ‏mirror ל-Docker Hub ו-metrics על loopback:

daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "default-address-pools": [
    {
      "base": "10.210.0.0/16",
      "size": 24
    }
  ],
  "bip": "10.209.0.1/24",
  "registry-mirrors": [
    "https://mirror.gcr.io"
  ],
  "live-restore": true,
  "metrics-addr": "127.0.0.1:9323"
}

הפקודות שמחילות אותו

apply-commands.txt
[ ! -f /etc/docker/daemon.json ] || sudo cp -p /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo install -m 0644 -D daemon.json /etc/docker/daemon.json
sudo dockerd --validate --config-file /etc/docker/daemon.json
sudo systemctl restart docker
docker info --format '{{.LoggingDriver}} {{.Driver}} live-restore={{.LiveRestoreEnabled}}'
docker info --format '{{range .RegistryConfig.Mirrors}}{{println .}}{{end}}'
docker network create anaroq-pool-test
docker network inspect --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}' anaroq-pool-test
docker network rm anaroq-pool-test
curl -s http://127.0.0.1:9323/metrics | head -n 5

מגבלות

  • שרתי Linux עם Docker Engine. ‏Docker Desktop ו-rootless Docker קוראים את ההגדרות שלהם ממקום אחר ולא נתמכים.
  • הכלי כותב קובץ חדש. מזגו ידנית מפתחות שכבר יש לכם (insecure-registries, ‏data-root, ‏dns…), אחרת הם יאבדו.
  • טווחי כתובות חלים על רשתות שנוצרות אחרי ההפעלה מחדש: רשתות קיימות שומרות על הטווחים שלהן עד שמוחקים ויוצרים אותן מחדש.
  • ‏pools של IPv6, ‏TLS ל-socket של ה-API והגדרות לוג לקונטיינר בודד לא נתמכים.

לא בטוחים אילו טווחים מתנגשים? בדקו את ה-LAN וה-VPN מול הרשתות של Docker

מקורות

  1. dockerd: daemon configuration file
  2. Docker Engine: configure logging drivers
  3. Docker Engine: live restore
  4. Docker Engine: storage drivers
  5. Docker Engine: collect metrics with Prometheus

עודכן

הצעד הבא

בודק התנגשויות רשת של Docker

כלי ציבורי חינמי של אנרוק, חברה שבונה תשתיות מחשוב. מה אנרוק בונה