DanLevy.net

إعداد خادم دوكر

ابدأ تشغيل خوادم قواعد البيانات بأوامر فردية

Hero image for إعداد خادم دوكر

إعداد خادم Docker

ملاحظة تاريخية: هذا مرجع للتطوير المحلي من عام 2015. إنه مفيد لفهم سير العمل القديم، لكن لا تتعامل مع هذه المقتطفات كنصائح إنتاجية حالية. تعد ملفات Docker Compose الحديثة، والشبكات المخصصة، وإصدارات الصور المثبتة، والمصادقة، والأسرار، وأتمتة التحديثات المراجعة إعدادات افتراضية أكثر أمانًا اليوم.

لمن هذا الدليل؟

لا تدع هذه الأسباب تعترض طريقك مرة أخرى!

روابط سريعة لأوامر من سطر واحد

تتضمن هذه المقالة أوامر من سطر واحد لبدء بعض قواعد البيانات الأكثر شيوعًا، بما في ذلك:

أيقونة PostgreSQL Postgres

أيقونة MongoDB MongoDB

أيقونة MySQL MySQL

أيقونة Elastic ElasticSearch

ملاحظة: تمت كتابة هذه الأوامر كاختصارات للتطوير المحلي. إذا قمت بتكييفها للإنتاج، أضف المصادقة وإدارة الأسرار والنسخ الاحتياطية وسياسة الشبكة والصور المثبتة وخطة الترقية أولاً.

مستخدمو Docker المتقدمون: إذا كنت معتادًا على docker-compose، فقد ترغب في تحويل أوامر shell أدناه لاستخدامها في ملفات docker-compose.yml الخاصة بك.

خادم Postgres

ابدأ حاوية، وقم بتسميتها pg-localhost

Terminal window
# Store db files on a local path, outside the container
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

الوصول إلى شل الحاوية كجذر

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) للتحقق من تكوين شبكتك (من نظام منفصل على شبكة أخرى).

الآن بعد أن أصبحت لديك الأوامر لبدء تشغيل خوادم قواعد البيانات الخاصة بك، الخطوة التالية هي حزم تطبيقك كصورة دوكر. الجزء 2 متابعة أدناه:

حزم تطبيق ويب NodeJS

  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 .

مرجع أوامر دوكر الرئيسية

بناء صورة دوكر

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

إنشاء/تشغيل تطبيق ويب مع روابط لخوادم قواعد البيانات

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

التشغيل التفاعلي (غير خفي، في الطرفية)

Terminal window
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bash

حذف مثيل الحاوية أو الصورة

مهم: أي بيانات غير مخزنة في مسار وحدة تخزين مثبتة سيتم فقدانها!!

Terminal window
# Delete Image
docker rmi -f app-name-here
docker 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