DanLevy.net

הגדרת שרת Docker

הפעל שרתי מסד נתונים עם פקודה אחת

Hero image for הגדרת שרת Docker

הגדרת שרת Docker

הערה היסטורית: זהו מקור לפיתוח מקומי משנת 2015. הוא שימושי להבנת זרימת העבודה הישנה, אך אל תתייחסו לקטעי הקוד האלה כהמלצות לייצור נוכחיות. קבצי Docker Compose מודרניים, רשתות מותאמות, גרסאות תמונה קבועות, אימות, סודות, ואוטומציה של עדכונים נבדקו והן ברירת מחדל בטוחה יותר היום.

למי מיועד המדריך הזה?

אל תתנו לסיבות אלו לעמוד בדרככם שוב!

קישורים מהירים לפקודות חד‑שורתיות

המאמר מציג פקודות חד‑שורה להפעלת כמה ממסדי הנתונים הפופולריים, כולל:

PostgreSQL icon Postgres

MongoDB icon MongoDB

MySQL icon MySQL

Elastic icon ElasticSearch

הערה: פקודות אלו נכתבו כקיצורי דרך לפיתוח מקומי. אם אתם מתכננים להשתמש בהן בייצור, הוסיפו אימות, ניהול סודות, גיבויים, מדיניות רשת, גרסאות תמונה קבועות ותוכנית עדכון תחילה.

משתמשי Docker מתקדמים: אם אתם מכירים docker-compose, ייתכן שתרצו להמיר את הפקודות במעטפת docker-compose.yml שלכם.

שרת Postgres

הפעל קונטיינר, וקרא לו pg-localhost

Terminal window
# שמור קבצי 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

Terminal window
docker exec --user postgres -it pg-localhost psql

גש למעטפת הקונטיינר כ‑root

Terminal window
docker exec -it pg-localhost bash

הערה: הפקודה שלמעלה משתמשת בתמונות הבסיסיות הרשמיות של Alpine Linux. זה לא הסביבה ה‑debian הרגילה שלך.

כדי להשתמש בתמונת בסיס debian/ubuntu, שנה postgres:12-alpine ל‑postgres:12.

שרת MongoDB

Terminal window
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 עם:

Terminal window
ls -lach $HOME/.mongodb

בואו נתחבר לשרת באמצעות כלי ה‑CLI mongosh. (אם הוא לא מותקן אצלך, ראה למטה.)

Terminal window
#> Using default arguments:
mongosh

והפלט צריך להיראות משהו כזה:

תצוגה מקדימה של פלט מסוף mongo

הגדרת כלי ה‑CLI של Mongo

שימוש ב‑brew וב‑OSX
Terminal window
brew tap mongodb/brew
brew install mongodb-community-shell

שרת MySQL

אזהרה: החלף את הסיסמה ב‑MYSQL_ROOT_PASSWORD למטה.

Terminal window
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

Terminal window
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

  1. הוסף קובץ ריק בשם Dockerfile בשורש הפרויקט שלך.
  2. (אופציונלי, מומלץ) הוסף קובץ .dockerignore עם כללי .gitignore כדי לשלול נתיבים גדולים שאינם חיוניים. כברירת מחדל כל קבצי הפרויקט נכללים.

צור Dockerfile בשורש האפליקציה

# Example for NodeJS
FROM node:22
EXPOSE 3000
COPY . /app/
WORKDIR /app
RUN apt-get update && apt-get dist-upgrade -yqq
RUN ["npm", "install"]
# Overridable Command
CMD ["npm", "start"]

קל יותר להראות איך מתחילים להשתמש ב‑Dockerfile ולהדגים את התוצאות דרך הקונסול (ראו פקודות למטה).

בטרמינל, cd לתיקיית הפרויקט שלך והרץ את פקודת ה‑build בכל פעם שאתה מפרסם שינוי – או רוצה לשנות/לעדכן את מערכת ההפעלה או את תצורת הסביבה)

Terminal window
docker build -t app-name-here .

רפרנס פקודות Docker מרכזיות

בניית תמונת Docker

Terminal window
docker build -t app-name-here .

יצירה/הרצה של אפליקציית Web עם קישורים לשרתי DB

Terminal window
docker network create app-local
docker network connect app-local mongodb
docker network connect app-local elastic
docker 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 שמותאם ייאבד!!

Terminal window
# מחיקת תמונה
docker rmi -f app-name-here
docker rm -f webapp01
# עכשיו הרץ שוב את `docker run...` מהשורה שלמעלה
# לדוגמה, נרצח את מופעי ה‑DB שהיו למעלה, הרץ: (התחל עם משהו כמו `docker stop {mongo,elastic}` )
docker rm -f mongo elastic