מחולל daemon.json ל-Docker
בוחרים הגדרות ומקבלים daemon.json ש-dockerd מקבל, הסבר לכל מפתח ואת הפקודות שמחילות אותו בבטחה. הכול נכתב בדפדפן שלכם.
קובץ ה-daemon.json שלכם
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
החלה
- גיבוי הקובץ הנוכחי, אם יש כזה.
- התקנת הקובץ החדש עם הבעלות וההרשאות הנכונות.
- בדיקה עם dockerd --validate לפני ההפעלה מחדש: קובץ ש-dockerd דוחה ימנע מ-Docker לעלות.
- הפעלה מחדש של Docker. קונטיינרים שרצים נעצרים ועולים שוב, אלא אם live-restore כבר היה פעיל לפני ההפעלה הזאת.
- בדיקה שההגדרות בתוקף. הגדרות לוגים ורשת חלות על קונטיינרים ורשתות שנוצרים אחרי ההפעלה מחדש; את האחרים יוצרים מחדש (docker compose up -d --force-recreate).
[ ! -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. כל מפתח מוסבר, והעמוד נותן את הפקודות שמחילות אותו בבטחה.
איך זה עובד
- הקובץ נכתב בדפדפן שלכם על ידי @anaroq/linux, המנוע של כלי ה-Linux האחרים שלנו. מפתח שלא הגדרתם לא נכתב, ו-Docker שומר עליו את ברירת המחדל שלו.
- ערך ש-dockerd היה דוחה, כמו pool שאינו טווח, pools חופפים או mirror עם נתיב, נדחה ליד השדה במקום להיכתב.
- אותם קבצים עוברים 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:
{
"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"
}
הפקודות שמחילות אותו
[ ! -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
מקורות
קשורים
הצעד הבא
כלי ציבורי חינמי של אנרוק, חברה שבונה תשתיות מחשוב. מה אנרוק בונה