ضبط الخادم
تثبيت Docker Engine على الخادم
عبء عامل الإرساء على Linux ضئيل. يعمل Docker على نظام Mac في جهاز ظاهري Linux ، بينما في Linux يستخدم مباشرة نواة المضيف. يمكنك قراءة المزيد عن هذا هنا .
نظرًا لأن ping الصغير مهم بالنسبة لنا ، فمن المنطقي شراء استضافة في موسكو ، لكن لا يوجد فرق كبير.
المجموع: Linux ، موسكو ، الخصائص تعتمد على احتياجاتك.
هناك فقط تعرفة جاهزة غير مكلفة لهذا على موقع ruvds.com . من الممكن أيضًا على موقع ruvds.com طلب الإعداد فورًا مع وجود Docker CE على متن الطائرة. تافه ، لكنها لطيفة.
ابحث عن كلمة مرور وقم بتسجيل الدخول في واجهة الويب الخاصة باستضافتك واتصل.


بعد ذلك ، قم بتثبيت Docker. هناك تعليمات ممتازة هنا ، أدناه سأقدم باختصار الأوامر منها (إذا لم يكن لديك فجأة
sudo، فلا تنس تثبيتها apt-get install sudoمن الأسفل su):
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
دعنا نتحقق من عمل عامل الميناء:
docker run hello-world

توليد المفاتيح
تحتاج أولاً إلى إنشاء مفاتيح SSL. يمكنك اتباع الطريق السهل والصعب. للحصول على إرشادات حول المسار الصعب (الأساسي) ، راجع وثائق Docker . لكن الأشخاص الطيبين قاموا بحشو كل شيء في حاوية <10 ميجابايت.
لنقم بإنشاء مجلد للبداية ، حيث سنخزن كل شيء. يمكن أن تكون المجلدات أي شيء. الأول (
/etc/docker/ssl) يخزن المفاتيح السرية ، والثاني ( ) يخزن ~/.dockerمفاتيح الوصول.
sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker
أولاً ، لنقم بإنشاء شهادات العميل و CA في المجلد المحلي
docker run --rm -v ~/.docker:/certs \
paulczar/omgwtfssl
لنقم بإنشاء شهادات الخادم باستخدام المرجع المصدق الذي تم إنشاؤه أعلاه. حدد هناك ، مفصولة بفواصل ، عناوين IP التي ستصل من خلالها إلى الخادم. في حالتنا ، لا تنس تحديد IP لخادمك هناك!
sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
-v ~/.docker:/certs \
-e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
-e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
-e SSL_CERT=/server/cert.pem paulczar/omgwtfssl
تكوين Docker daemon
تتمثل المهمة الرئيسية في هذه المرحلة في دفع وسيطات سطر الأوامر باستخدام المعلمات التي نحتاجها عند بدء تشغيل عامل الإرساء. كيف تفعل ذلك ليس مهمًا ، على Ubuntu يمكنك القيام بذلك على النحو التالي :
1. قم بتحرير الملف باستخدام
/etc/default/dockerالمحرر المفضل لديك
nano /etc/default/docker
وأضف المتغير "DOCKER_OPTS" إلى النهاية. لا تنس إدخال عنوان IP الخارجي الخاص بك هناك
DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"
2. إضافة الوسائط لبدء الخدمة. في Ubuntu ، ملف معلمة بدء التشغيل هو
/lib/systemd/system/docker.service. أضف سطرًا إلى القسم الفرعي [Service]:
EnvironmentFile=/etc/default/docker
ونقوم بتغيير أمر الإطلاق جنبًا إلى جنب:
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
نعم ، كانت النقطة 1 اختيارية ، ويمكن إدراج وسيطات الأمر هنا ، ولكن هناك عددًا قليلاً منها ومن غير الملائم تشغيل أمر كبير في ملف الخدمة.
3. أعد تشغيل البرنامج الخفي
sudo systemctl daemon-reload
sudo systemctl restart docker
4. تحقق في سجلات البرنامج الخفي من أن كل شيء يعمل:
journalctl -u docker.service -f

5. لنحاول الاتصال عبر tls:
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info

العمل!
التكوين على العميل
قبل أن تبدأ في تكوين العملاء ، تحتاج إلى تنزيل مجلد الشهادات على جهاز الكمبيوتر الخاص بك. يمكنك القيام بذلك بأي طريقة مريحة. على سبيل المثال ، عبر "scp":
على جهاز بعيد:
mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker
على الجهاز المحلي:
scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker
بعد ذلك ، استخدم هذا المجلد لتكوين عميل عامل الإرساء الخاص بك.
نظام التشغيل Mac OS CLI
هنا يأتي الإعداد إلى حقيقة أنك تحتاج إلى تسجيل المتغيرات في بيئتك وسيعمل كل شيء. ومع ذلك ، فإن السؤال الذي يطرح نفسه: "أين يمكنني الحصول على عميل عارية؟ لا نحتاج إلى العميل الرسمي للوزن الثقيل بسعة 2 جيجابايت والذي يأتي مع محرك Docker ، أليس كذلك؟ "
هل هناك حل! لطالما تم تقسيم Modern Docker إلى أجزاء العميل والخادم. يمكنك تنزيل ثنائيات عميل منفصلة مجمعة لنظام التشغيل macOS. التعليمات الرسمية موجودة هنا ، لكنني سأقدم ملخصًا موجزًا هنا:
1. قم بتنزيل أحدث الثنائيات أو تلك المقابلة لخادمك (يمكنك سحبها باستخدام الأمر
docker info) من الرابط وفك ضغطها
2. انسخ الثنائيات إلى المجلد
/usr/local/bin/للعمل عالميًا:
sudo cp docker/docker /usr/local/bin/
3. نسجل في
~/.bashrcأو ~/.zshrcالمتغيرات البيئية اللازمة. لا تنس إدخال عنوان IP الخاص بك والمسار إلى المجلد بالشهادات :
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1
4. أعد تشغيل الكمبيوتر (Schaub بالتأكيد) ، تحقق من:
docker info
docker run hello-world

جمال!
Jetbrains IDEs (PyCharm ، IDEA ، Android Studio ، إلخ)
تدعم استوديوهات Jetbrains عامل الإرساء عبر tls خارج الصندوق. يقع هذا الإعداد في
Preference->Build, Execution, Deployment->Docker->+. تحتاج إلى تحديد TCP socketوإدخال التفاصيل الخاصة بك هناك. ومع ذلك، هناك كمية الصيد.

إذا تم كل شيء على النحو المنشود ، فسيظهر خطأ:
استجابة خطأ من البرنامج الخفي: أرسل العميل طلب HTTP إلى خادم HTTPS.أو
أخطاء جميلة طباعة المعلومات
لا يمكن الاتصال: الحالة 400: أرسل العميل طلب HTTP إلى خادم HTTPSمن الضروري أن نوضح بوضوح للاستوديو الخاص بنا البروتوكول الذي نستخدمه
https:
YOUR_IP : 2376كل شيء يجب أن يعمل بشكل جيد بعد ذلك.
مكافأة (حامل)
من أجل تتبع الحاويات قيد التشغيل والمستخدمة بالفعل ، قمت بتثبيت Portainer على هذا الخادم. يجب وضعها في سطرين:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
بعد ذلك ،
YOUR_IP:9000سيتم تعليق واجهة الويب الجميلة ويمكنك رؤية الحاويات قيد التشغيل والموت. تذكر كيف بدأنا hello-world؟ إنه هنا ويمكنك تنظيفه مباشرة من الواجهة.

يمكن توصيل Portainer نفسه بأي جهاز Docker وإدارة حاويات عامل التحميل لجميع أجهزتك من مكان واحد. يمكن ضبط المقياس (Grafana + Prometheus + Alerts) بنفس السهولة باستخدام أمرين (لا تنس التثبيت
gi و docker-compose):
git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d


فقط للتخزين الذي تحتاج إلى التغيير
sum(node_filesystem_free_bytes{fstype="aufs"})إليهsum(node_filesystem_free_bytes{fstype="ext4"})

خاتمة
عندما اشتريت جهاز كمبيوتر محمول ، لم أستمتع بنفسي على أمل أن يكون ذلك كافياً بالنسبة لي لأية مهمة ، خاصة أنه سيكون كافياً بالنسبة لي لتطوير Java / Android. لكنني فوجئت بسرور ، حتى الآن كل مشاريعي الشخصية والمفتوحة المصدر فقط ، تطير في IDE. ومع ذلك ، أدركت أنه على الرغم من حبي لهذه الآلة الكاتبة ، فإنها لن تقضي على Docker. كنت سعيدًا جدًا بتكوينه مرة واحدة على خادم عامل إرساء بعيد. أثناء عملية التطوير ، من غير الواضح تمامًا أن الخادم ليس محليًا. لا أشعر بأي قيود ، كل شيء مماثل لتشغيل Docker بدون الإنترنت قبل أن يصبح الأمر غير منطقي. بشكل عام ، أنا راضٍ جدًا. -1 سبب لشراء كمبيوتر محمول قوي وثقيل.
بالإضافة إلى ذلك ، فإن Docker overload for Linux ضئيلة ، لذا يمكنك استئجار سيارة مقابل 240 روبل شهريًا من RuVDS في الاتحاد الروسي (وبخصم باستخدام رمز HABR الترويجي-10٪ وحتى أقل) ولا تقلق بشأن ping وتأثير تطبيقات الخادم على واجهة المستخدم. بالإضافة إلى وجود عنوان IP خارجي (القدرة على إظهار العملاء والحفاظ على برامج التطوير) ، وشبكة VPN خاصة وموثوقية من الدرجة الأولى. بشكل عام ، أنا راضٍ.
مصادر:
- مقال 2016 حول التخصيص لـ CoreOS
- Docker Remote API بدون تشفير
- موقع Docker وجميع الموارد المرتبطة به في المقالة نفسها
