إعداد خادم دوكر
ابدأ تشغيل خوادم قواعد البيانات بأوامر فردية
إعداد خادم Docker
ملاحظة تاريخية: هذا مرجع للتطوير المحلي من عام 2015. إنه مفيد لفهم سير العمل القديم، لكن لا تتعامل مع هذه المقتطفات كنصائح إنتاجية حالية. تعد ملفات Docker Compose الحديثة، والشبكات المخصصة، وإصدارات الصور المثبتة، والمصادقة، والأسرار، وأتمتة التحديثات المراجعة إعدادات افتراضية أكثر أمانًا اليوم.
لمن هذا الدليل؟
- هل سبق لك أن أردت اختبار تطبيق بقاعدة بيانات “قابلة للتخلص”؟
- ورثت قاعدة كود مشبوهة؟ تفضل عدم مشاركة الوصول إلى قاعدة بياناتك الحالية؟
- تعمل مع عملاء حساسين أمنيًا؟ لا تخاطر بالتلوث المتبادل! استخدم الحاويات وتحكم في استمرارية البيانات!
- لا يمكنك ترقية بيئة التطوير الخاصة بك إلى أحدث إصدار من قاعدة البيانات لأن تطبيقاتك القديمة تعتمد على إصدار عمره 12 عامًا من MySQL؟
لا تدع هذه الأسباب تعترض طريقك مرة أخرى!
روابط سريعة لأوامر من سطر واحد
تتضمن هذه المقالة أوامر من سطر واحد لبدء بعض قواعد البيانات الأكثر شيوعًا، بما في ذلك:
ملاحظة: تمت كتابة هذه الأوامر كاختصارات للتطوير المحلي. إذا قمت بتكييفها للإنتاج، أضف المصادقة وإدارة الأسرار والنسخ الاحتياطية وسياسة الشبكة والصور المثبتة وخطة الترقية أولاً.
مستخدمو Docker المتقدمون: إذا كنت معتادًا على
docker-compose، فقد ترغب في تحويل أوامر shell أدناه لاستخدامها في ملفاتdocker-compose.ymlالخاصة بك.
خادم Postgres
ابدأ حاوية، وقم بتسميتها
pg-localhost
# Store db files on a local path, outside the containermkdir -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الوصول إلى شل الحاوية كجذر
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) للتحقق من تكوين شبكتك (من نظام منفصل على شبكة أخرى).
الآن بعد أن أصبحت لديك الأوامر لبدء تشغيل خوادم قواعد البيانات الخاصة بك، الخطوة التالية هي حزم تطبيقك كصورة دوكر. الجزء 2 متابعة أدناه:
حزم تطبيق ويب NodeJS
- أضف ملفًا فارغًا باسم
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 build -t app-name-here .إنشاء/تشغيل تطبيق ويب مع روابط لخوادم قواعد البيانات
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التشغيل التفاعلي (غير خفي، في الطرفية)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashحذف مثيل الحاوية أو الصورة
مهم: أي بيانات غير مخزنة في مسار وحدة تخزين مثبتة سيتم فقدانها!!
# Delete Imagedocker rmi -f app-name-heredocker rm -f webapp01# now re-run your `docker run...` from ^^^# So for example, let's kill your db instances above, run: ( start with something like `docker stop {mongo,elastic}` )docker rm -f mongo elastic