محطة العمل في حاوية عامل ميناء

على ماذا؟ تأتي إلي جميع أنواع الأفكار باستمرار ، وأريد أن أجرب بعضها على الفور ، لكن محطة العمل ليست دائمًا في متناول اليد ، لذلك قمت بإعداد IDE لكل ما يأتي في متناول اليد. ونتيجة لذلك ، بدأت الأجهزة تشوش ، وأصبح من الصعب صيانتها وتحديثها.

لحل هذه المشكلة ، قررت وضع مثل هذا "دفتر الملاحظات" في السحابة ، والذي سيتم تحديثه يوميًا وحذف كل القمامة المتراكمة. وللعمل ، اتصل به عن بعد.

صورة

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

لإنشاء مثل هذه الحاوية ، يجب عليك كتابة ملف Dockerfile. وفي المقالة سأصف العملية برمتها من إنشائها. من لا يريد أن يخلق نفسه ، لكنه يريد أن يأخذ ويحاول ، ثم في أسفل المقالة ستكون هناك روابط إلى الصور النهائية.

نظام التشغيل


سوف يفعل أي لينكس. أنا شخصياً أفضل OpenSuse الجميل ، ولكن بمقارنة استهلاك الذاكرة مع CentOS ، قررت اختيار الأخير. في الواقع ، كلما استهلكت الحاوية ذاكرة أقل ، يمكنك توفير المزيد في الاستضافة.

لنبدأ بإنشاء ملف إرساء:

FROM centos:7

الوصول عن بعد


من أجل الاتصال بالحاوية عليه ، يجب عليك تكوين خادم الوصول عن بعد VNC. يجب فهم عاملين لهذا:

  1. لا يحتوي النظام على شاشة. لذلك ، يجب محاكاته. هناك خادم خاص x0vncserver لهذا.
  2. لا يجب أن يكون خادم VNC واسع الحيلة. بعد كل شيء ، عليك أن تدفع لهم. ويجب أن يكون التأخر في إرسال الإشارة ضئيلًا ، وإلا فإنه يسبب عدم الراحة.

لحل كلتا المشكلتين ، اخترت TigerVNC Server للخادم و TightVNC للعميل. يتم تضمين خادم TigerVNC في تسليم أي لينكس ، خفيف الوزن وسريع ، كما أنه يدعم العمل بدون شاشة من خلال x0vncserver. يوفر عميل TightVNC نقلًا سريعًا للصور بحيث يبدو أنه ليس اتصالاً عن بُعد ، ولكنه برنامج يعمل على جهاز كمبيوتر.

تمديد ملف Dockerfile:

FROM centos:7

RUN yum install -y epel-release dnf \
        && \
        dnf install -y \
            tigervnc-server \
        && \
        yum clean all && dnf clean all \
        && \
        rm -rf /var/cache/yum/* && rm -rf /var/cache/dnf/*

بعد تثبيت البرامج ، نقوم بمسح ذاكرة التخزين المؤقت لتفتيح وزن الصورة.

سطح المكتب


أنا حقا أحب KDE مع موضوع Breeze ، لكن KDE هو سطح مكتب شجاع للغاية. كان غنوم ومشتقاته أكثر شراهة. Xfce ، الثلج ليس جميلًا جدًا. لحسن الحظ ، هناك حل - سطح مكتب LXQT بموضوع Kde-Plasma.

قم بتثبيت سطح المكتب:

FROM centos:7

RUN yum install -y epel-release dnf \
        && \
        dnf install -y \
            tigervnc-server \
            openbox obconf-qt \
            lxqt-about lxqt-common lxqt-config lxqt-globalkeys lxqt-notificationd \
            lxqt-openssh-askpass lxqt-panel lxqt-policykit lxqt-qtplugin lxqt-runner \
            lxqt-session pcmanfm-qt \
            dejavu-sans-mono-fonts \
            xterm nano htop expect sudo \
        && \
        yum clean all && dnf clean all \
        && \
        rm -rf /var/cache/yum/* && rm -rf /var/cache/dnf/*

أكثر قليلا ويمكنك الركض.

إنشاء المستخدم


في الحاوية ، من الضروري العمل من بعض المستخدمين. للقيام بذلك ، قم بإنشائه وتعيين كلمة مرور ، وكذلك تعيين كلمة مرور للمستخدم الجذر:

... Dockerfile

ENV HOME=/home/headless

RUN /bin/dbus-uuidgen --ensure && \
        useradd headless && \
        echo "centos" | passwd --stdin root && \
        echo "centos" | passwd --stdin headless

هنا بلا رأس هو المستخدم الذي نقوم بإنشائه والذي سنعمل منه ، "centos" هي كلمة المرور التي يحددها المستخدم والجذر. من الأفضل تمريرها من المعلمات الخارجية عندما تبدأ الحاوية ، ولكن حتى في هذا الشكل لن تكون الحاوية عرضة للخطر ، لأن سيكون الاتصال محميًا بكلمة مرور في VNC عبر كلمة المرور في الوسيطات.

تكوين بدء تشغيل خادم vnc


للبدء ، تحتاج إلى برنامج نصي إضافي يقوم بتكوين خادم VNC الخاص بنا:

#!/usr/bin/expec

spawn /usr/bin/vncserver :1 -fg -geometry 1820x960
expect "Password:"
send "$env(password)\r"
expect "Verify:"
send "$env(password)\r"
expect "Would you like to enter a view-only password (y/n)?"
send "n\r"

set timeout -1
expect eof

يجب وضعه بجانب ملف Dockefile ، وبعد ذلك سيتم تضمينه في الحاوية وسيبدأ البرنامج منه. في هذا الملف ، يجب عليك تحديد الدقة التي تخطط للعمل بها ، على سبيل المثال ، لدي مجموعة 1820x960. إذا قمت بتحديد أقل من حجم نافذة العميل ، فقد يتعطل الخادم بسبب نقص الذاكرة. إذا حددت المزيد ، فستحتاج إلى تحجيم الصورة وستصبح عناصر سطح المكتب صغيرة جدًا. أيضًا في هذا البرنامج النصي ، سيتم تعيين كلمة مرور من المتغيرات التي سيتم تمريرها في معلمات تشغيل الحاوية.

يبقى نسخ هذا الملف إلى الحاوية وإضافة المعلمات لإطلاقه:

... Dockerfile

COPY ./startup.sh ${HOME}
RUN mkdir -p ${HOME}/.vnc \
        && \
        echo '#!/bin/sh' > ${HOME}/.vnc/xstartup && \
        echo 'exec startlxqt' >> ${HOME}/.vnc/xstartup && \
        chmod 775 ${HOME}/.vnc/xstartup \
        && \
        chown headless:headless -R ${HOME}


WORKDIR ${HOME}
USER headless
ENTRYPOINT ["expect", "./startup.sh"]

هذا كل شيء ، يمكنك الركض. إذا كنت مرتبكًا في تجميع ملف Dockerfile ، فيمكن العثور على نسخته الكاملة في المستودع الخاص بي ، والحاوية النهائية في مركز عامل الميناء .

لبدء الحاوية النهائية ، يجب تشغيل الأمر:

docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/centos-lxqt-vnc

والتواصل باستخدام عميل TightVNC.

صورة

بعد الاتصال ، يجب عليك إدخال كلمة مرور المستخدم المحددة مسبقًا. من المستحسن أيضًا تغييره على الفور لمزيد من الأمان.

لتمكين التصميم الجميل كما في لقطة الشاشة أعلاه ، انتقل إلى ابدأ> التفضيلات> المظهر> موضوع LXQt وحدد سمة Kde-plasma.

برامج العمل


يمكنك الآن إنشاء صورة ثانية باستخدام برامج العمل. للقيام بذلك ، ما عليك سوى التقاط الصورة التي تم إنشاؤها أعلاه وإضافتها بالبرامج النصية لتثبيت الحزم:

FROM labeg/centos-lxqt-vnc:latest

USER root

# dotnet vscode monodevelop nodejs git2
RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm \
        && \
        rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
        sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo' \
        && \
        rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" && \
        su -c 'curl https://download.mono-project.com/repo/centos7-vs.repo | tee /etc/yum.repos.d/mono-centos7-vs.repo' \
        && \
        yum install -y https://centos7.iuscommunity.org/ius-release.rpm \
        && \
        curl -sL https://rpm.nodesource.com/setup_13.x | bash - \
        && \
        dnf install -y geany git2u git2u-gui code monodevelop firefox dotnet-sdk-3.1 nodejs gnome-terminal gnome-system-monitor \
        && \
        npm install -g gulp typescript npm-check-updates \
        && \
        chown headless:headless -R ${HOME}

USER headless

RUN code --install-extension ms-vscode.vscode-typescript-tslint-plugin && \
    code --install-extension dbaeumer.vscode-eslint && \
    code --install-extension mrmlnc.vscode-scss && \
    code --install-extension visualstudioexptteam.vscodeintellicode && \
    code --install-extension ms-dotnettools.csharp && \
    code --install-extension joelday.docthis && \
    code --install-extension mrmlnc.vscode-remark && \
    code --install-extension eamodio.gitlens

يقوم البرنامج النصي بتثبيت أدوات Typescript و C # تحت Linux. هذا هو NodeJS ، VS Code مع الامتدادات اللازمة و Monodevelop (ويعرف أيضًا باسم Visual Studio لنظام التشغيل Mac).

يبدأ بالبساطة كما في الصورة السابقة:

docker run -it --rm -e password='YOUR_VNC_PASSWORD' -p5901:5901 labeg/devpc

الآن في ثوان يمكنك نشر بيئة عمل نظيفة.

صورة

المستودعات والصور النهائية


إذا كنت بحاجة إلى مستودعات وصور جاهزة ، أو إذا كنت ترغب في تحسين المستودعات الموجودة ، على سبيل المثال ، من خلال معلمات بدء التشغيل ، قم بتعيين كلمة مرور المستخدم أو دقة الشاشة أو إعادة تشغيل خادم VNC بعد تعطله ، ثم مرحبًا بك في مستودعاتي.

صورة بسيطة مع Gihub سطح المكتب Dockerhub .

صورة تحتوي على Typescript وأدوات C # Gihub Dockerhub .

All Articles