הגדרת שרת Docker
הפעל שרתי מסד נתונים עם פקודה אחת
הגדרת שרת Docker
הערה היסטורית: זהו מקור לפיתוח מקומי משנת 2015. הוא שימושי להבנת זרימת העבודה הישנה, אך אל תתייחסו לקטעי הקוד האלה כהמלצות לייצור נוכחיות. קבצי Docker Compose מודרניים, רשתות מותאמות, גרסאות תמונה קבועות, אימות, סודות, ואוטומציה של עדכונים נבדקו והן ברירת מחדל בטוחה יותר היום.
למי מיועד המדריך הזה?
- האם אי פעם רציתם לבדוק אפליקציה עם מסד נתונים “זניח”?
- קיבלתם קוד בסיס חשוד? מעדיפים לא לשתף גישה למסד הנתונים הקיים שלכם?
- עובדים עם לקוחות רגישים מבחינת אבטחה? אל תסכנו זיהום צולב! השתמשו במכולות ובקרו בהתמדה של הנתונים!
- לא יכולים לשדרג את סביבת הפיתוח לגרסה החדשה של מסד הנתונים מכיוון שהאפליקציות הישנות שלכם תלויות ב‑MySQL בן 12 שנה?
אל תתנו לסיבות אלו לעמוד בדרככם שוב!
קישורים מהירים לפקודות חד‑שורתיות
המאמר מציג פקודות חד‑שורה להפעלת כמה ממסדי הנתונים הפופולריים, כולל:
הערה: פקודות אלו נכתבו כקיצורי דרך לפיתוח מקומי. אם אתם מתכננים להשתמש בהן בייצור, הוסיפו אימות, ניהול סודות, גיבויים, מדיניות רשת, גרסאות תמונה קבועות ותוכנית עדכון תחילה.
משתמשי Docker מתקדמים: אם אתם מכירים
docker-compose, ייתכן שתרצו להמיר את הפקודות במעטפתdocker-compose.ymlשלכם.
שרת Postgres
הפעל קונטיינר, וקרא לו
pg-localhost
# שמור קבצי DB בנתיב מקומי, מחוץ לקונטיינרmkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'התאם את אפשרויות שורת הפקודה לפי הצורך. (הארגומנטים של דמון postgres מתחילים אחרי שם תמונת ה‑Docker
postgres:16-alpine. ראהpostgres -c 'listen_addresses=*'...)
גש לממשק
psqlכמשתמש postgres
docker exec --user postgres -it pg-localhost psqlגש למעטפת הקונטיינר כ‑root
docker exec -it pg-localhost bashהערה: הפקודה שלמעלה משתמשת בתמונות הבסיסיות הרשמיות של Alpine Linux. זה לא הסביבה ה‑debian הרגילה שלך.
כדי להשתמש בתמונת בסיס debian/ubuntu, שנה
postgres:12-alpineל‑postgres:12.
שרת MongoDB
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'עכשיו שהשרת שלך הוגדר, אמת שהנתונים נמצאים ב‑$HOME/.mongodb עם:
ls -lach $HOME/.mongodbבואו נתחבר לשרת באמצעות כלי ה‑CLI mongosh. (אם הוא לא מותקן אצלך, ראה למטה.)
#> Using default arguments:mongoshוהפלט צריך להיראות משהו כזה:

הגדרת כלי ה‑CLI של Mongo
שימוש ב‑brew וב‑OSX
brew tap mongodb/brewbrew install mongodb-community-shellשרת MySQL
אזהרה: החלף את הסיסמה ב‑
MYSQL_ROOT_PASSWORDלמטה.
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8שרת ElasticSearch
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'הערות אבטחה
הערה: אפשרות הפורט
-p 127.0.0.1:27017:27017מונעת גישה למופע שלך מלבד מהרשת המקומית של שרת ה‑Docker.
כדי “לפרסם” את הפורטים החשופים, הסר את קידומת כתובת ה‑IP המקומית כדי לאפשר גישה חיצונית:-p 27017:27017. ודא שנקטת באמצעי האבטחה הנדרשים.
מומלץ: השתמש תמיד בכלי סריקת פורטים (כגון nmap/masscan) כדי לאמת את תצורת הרשת שלך (ממערכת נפרדת ברשת אחרת).
עכשיו שיש לך את הפקודות להפעלת שרתי המסד נתונים, הצעד הבא הוא לארוז את היישום שלך בתור תמונת Docker. המשך חלק 2 להלן:
אריזת אפליקציית NodeJS Web
- הוסף קובץ ריק בשם
Dockerfileבשורש הפרויקט שלך. - (אופציונלי, מומלץ) הוסף קובץ
.dockerignoreעם כללי.gitignoreכדי לשלול נתיבים גדולים שאינם חיוניים. כברירת מחדל כל קבצי הפרויקט נכללים.
צור Dockerfile בשורש האפליקציה
# Example for NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Overridable CommandCMD ["npm", "start"]קל יותר להראות איך מתחילים להשתמש ב‑Dockerfile ולהדגים את התוצאות דרך הקונסול (ראו פקודות למטה).
בטרמינל, cd לתיקיית הפרויקט שלך והרץ את פקודת ה‑build בכל פעם שאתה מפרסם שינוי – או רוצה לשנות/לעדכן את מערכת ההפעלה או את תצורת הסביבה)
docker build -t app-name-here .רפרנס פקודות Docker מרכזיות
בניית תמונת Docker
docker build -t app-name-here .יצירה/הרצה של אפליקציית Web עם קישורים לשרתי DB
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-here#### הרצה אינטראקטיבית (לא ברקע, בטרמינל)
```sh
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashמחיקת מופע מכולה או תמונה
חשוב: כל נתון שלא נשמר ב‑volume שמותאם ייאבד!!
# מחיקת תמונהdocker rmi -f app-name-heredocker rm -f webapp01# עכשיו הרץ שוב את `docker run...` מהשורה שלמעלה# לדוגמה, נרצח את מופעי ה‑DB שהיו למעלה, הרץ: (התחל עם משהו כמו `docker stop {mongo,elastic}` )docker rm -f mongo elastic