ממיר docker run ל-Docker Compose

הדביקו פקודת docker run וקבלו את אותו קונטיינר כ-service של Compose, בדוק ב-Compose Analyzer. שום דבר לא רץ, ושום דבר לא יוצא מהעמוד.

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

הדביקו את הטקסט, או בחרו קובץ מהמחשב. עד 64 KiB.

0 מתוך 64 KiB

בכיוון ההפוך: Compose ל-docker run

מה הכלי עושה

הכלי קורא פקודת docker run אחת כמו ש-CLI של Docker קורא אותה (אפשרויות קצרות וארוכות, ערכים עם =, מירכאות ושבירת שורות עם \) וכותב docker-compose.yml עם service אחד שמפעיל את אותו קונטיינר: פורטים, volumes ו-mounts, משתני סביבה, רשתות, מדיניות restart, משתמש, capabilities, מגבלות משאבים, לוגים ו-health check.

איך זה עובד

  1. הפקודה מפוצלת למילים כמו ב-shell של POSIX, בלי להריץ או להרחיב דבר. כל מה שהיה מריץ פקודה נוספת (;‏, &&‏, |‏, הפניות, $( ) או backticks) עוצר את ההמרה ומציין את המיקום.
  2. כל אפשרות ממופה למאפיין של Compose עם אותה השפעה. אפשרויות ש-Compose לא יודע לבטא, ואפשרויות של ה-CLI בלבד כמו ‎--rm ו-‎-d, מופיעות כהערות ולא נעלמות בשקט.
  3. ערך שהשם או המבנה שלו נראים כמו סוד (PASSWORD,‏ TOKEN,‏ ‎*_KEY, כתובת URL עם סיסמה) מוחלף בהפניה ל-.env, ו-.env.example מפרט את המשתנה ריק. volumes עם שם שומרים על השם שלהם, ורשתות שהפקודה הצטרפה אליהן מוגדרות external.
  4. אחר כך הקובץ נבדק ב-Compose Analyzer, באותם כללים של /tools/compose-analyzer.

דוגמה

פקודת PostgreSQL מהתיעוד הרשמי של ה-image, אחרי המרה:

קלט
docker run
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
פלט
docker-compose.yml
# Converted from a docker run command by ANAROQ (https://anaroq.com/tools/docker-run-to-compose), converter 1.0.0.
# Review it before use. Nothing was run.

services:
  some-postgres:
    image: "postgres"
    container_name: "some-postgres"
    environment:
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}"
פלט
.env.example
# Variables of the docker-compose.yml converted by ANAROQ (https://anaroq.com/tools/docker-run-to-compose).
# Copy this file to .env and fill in every value. Never commit .env.
# The docker run command had these values inline; ANAROQ does not copy them here.

# Secret, required.
POSTGRES_PASSWORD=

מגבלות

  • פקודה אחת בכל פעם, ורק docker run (או docker container run): לא docker create, לא Podman, לא docker-compose v1 ולא Swarm.
  • משתני shell כמו $PWD נשארים משתנים: Compose קורא אותם מהסביבה או מ-.env כשהוא עולה.
  • בלי ‎--network, ‏docker run משתמש ברשת ה-bridge של ברירת המחדל; Compose שם את ה-service ברשת של הפרויקט, ולכן קונטיינרים שהופעלו בנפרד לא רואים אותו בשם.
  • המרה ובדיקות סטטיות: שום דבר לא עולה, ולכן ה-image, הפורטים והנתיבים לא נבדקים בפועל.

מקורות

  1. Docker Docs: docker container run
  2. Docker Docs: Compose file reference
  3. Compose Specification

עודכן

הצעד הבא

Docker Compose Analyzer

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