Workstation dalam wadah buruh pelabuhan

Untuk apa? Semua jenis ide terus-menerus datang kepada saya dan beberapa di antaranya saya langsung ingin mencoba, tetapi workstation tidak selalu di tangan, jadi saya mengatur IDE untuk semua yang datang ke tangan. Akibatnya, perangkat mulai berantakan, dan menjadi sulit untuk mempertahankan dan memperbaruinya.

Untuk mengatasi masalah ini, saya memutuskan untuk meletakkan "buku catatan" di cloud, dan itu akan diperbarui setiap hari dan menghapus semua sampah yang terakumulasi. Dan untuk bekerja, sambungkan ke sana dari jarak jauh.

gambar

Sebagai hasilnya, tanpa curiga, ia membuat alat yang sangat nyaman untuk menyelesaikan sejumlah besar tugas: notebook, situs uji, untuk melihat apa yang tidak ditampilkan ponsel, kotak pasir yang aman, dan menjalankan skrip untuk program yang hanya bekerja pada GUI dan banyak lainnya. dll. Dan di artikel saya ingin berbagi metode membuat wadah seperti itu.

Untuk membuat wadah seperti itu, Anda harus menulis Dockerfile Anda. Dan dalam artikel ini saya akan menjelaskan seluruh proses pembuatannya. Siapa yang tidak ingin membuat dirinya sendiri, tetapi ingin mengambil dan mencoba, maka di bagian bawah artikel akan ada tautan ke gambar yang sudah jadi.

sistem operasi


Setiap Linux akan melakukannya. Secara pribadi, saya lebih suka OpenSuse yang cantik, tetapi membandingkan konsumsi memorinya dengan CentOS saya memutuskan untuk memilih yang terakhir. Memang, semakin sedikit memori yang dikonsumsi sebuah wadah, semakin Anda dapat menghemat hostingnya.

Mari kita mulai membuat buruh pelabuhan:

FROM centos:7

Akses jarak jauh


Untuk terhubung ke wadah di dalamnya, Anda harus mengkonfigurasi server akses jarak jauh VNC. Dua faktor harus dipahami untuk ini:

  1. Sistem tidak memiliki monitor. Karena itu, harus ditiru. Ada server x0vncserver khusus untuk ini.
  2. Server VNC seharusnya tidak banyak akal. Lagi pula, Anda harus membayarnya. Dan kelambatan dalam transmisi sinyal harus minimal, jika tidak menyebabkan ketidaknyamanan.

Untuk mengatasi kedua masalah, saya memilih TigerVNC Server untuk server dan TightVNC untuk klien. TigerVNC Server termasuk dalam pengiriman Linux apa pun, ringan, cepat, dan juga mendukung pekerjaan tanpa monitor melalui x0vncserver. Klien TightVNC menyediakan transfer gambar sedemikian cepat sehingga rasanya bukan koneksi jarak jauh, tetapi sebuah program yang berjalan di komputer.

Perpanjang 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/*

Setelah menginstal program, kami menghapus cache untuk meringankan berat gambar.

Desktop


Saya sangat suka KDE dengan tema Breeze, tetapi KDE adalah desktop yang sangat rakus. Gnome dan turunannya bahkan lebih rakus. Xfce, Es tidak terlalu indah. Untungnya, ada solusi - desktop LXQT dengan tema Kde-Plasma.

Pasang desktop:

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/*

Sedikit lagi dan Anda bisa lari.

Pembuatan Pengguna


Dalam wadah itu perlu untuk bekerja dari beberapa pengguna. Untuk melakukan ini, buat dan setel kata sandi, serta setel kata sandi untuk pengguna root:

... Dockerfile

ENV HOME=/home/headless

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

Di sini headless adalah pengguna yang kami buat dan dari siapa kami akan bekerja, "centos" adalah kata sandi yang ditentukan oleh pengguna dan root. Lebih baik meneruskannya dari parameter eksternal ketika wadah mulai, tetapi bahkan dalam bentuk ini wadah tidak akan rentan, karena koneksi akan dilindungi kata sandi di VNC melalui kata sandi dalam argumen.

Konfigurasikan startup server vnc


Untuk memulai, Anda memerlukan skrip bantu yang akan mengonfigurasi Server VNC kami:

#!/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

Itu harus diletakkan di sebelah Dockefile, nanti akan dimasukkan dalam wadah dan program akan mulai dari itu. Dalam file ini, Anda harus menentukan resolusi di mana Anda berencana untuk bekerja, misalnya, saya memiliki 1820x960 set. Jika Anda menentukan kurang dari ukuran jendela klien, server mungkin macet karena kekurangan memori. Jika Anda menentukan lebih banyak, maka gambar harus diskalakan dan elemen desktop akan menjadi terlalu kecil. Juga dalam skrip ini, kata sandi akan ditetapkan dari variabel yang akan diteruskan dalam parameter peluncuran wadah.

Tetap menyalin file ini ke wadah dan menambahkan parameter untuk peluncurannya:

... 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"]

Itu saja, Anda bisa lari. Jika Anda bingung dalam mengkompilasi Dockerfile, maka versi lengkapnya dapat ditemukan di repositori saya , dan wadah yang sudah jadi di hub docker .

Untuk memulai wadah yang sudah jadi, Anda harus menjalankan perintah:

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

Dan hubungkan menggunakan klien TightVNC.

gambar

Setelah terhubung, Anda harus memasukkan kata sandi pengguna yang ditentukan sebelumnya. Anda juga disarankan untuk segera mengubahnya agar lebih aman.

Untuk mengaktifkan desain yang indah seperti pada tangkapan layar di atas, buka Start> Preferences> Appearance> LXQt Theme dan pilih tema Kde-plasma.

Program untuk bekerja


Sekarang Anda dapat membuat gambar kedua dengan program kerja. Untuk melakukan ini, ambil saja gambar yang dibuat di atas dan tambahkan dengan skrip untuk menginstal paket:

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

Script menginstal alat untuk pengembangan Scriptot dan C # di Linux. Ini adalah NodeJS, VS Code dengan ekstensi yang diperlukan dan Monodevelop (alias Visual Studio untuk Mac).

Dimulai sesederhana gambar sebelumnya:

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

Sekarang dalam hitungan detik Anda dapat menggunakan lingkungan kerja yang bersih.

gambar

Repositori dan gambar jadi


Jika Anda memerlukan repositori dan gambar yang sudah jadi, atau jika Anda ingin meningkatkan yang sudah ada, misalnya, melalui parameter startup, mengatur kata sandi pengguna, resolusi layar, atau me-restart server VNC setelah crash, maka selamat datang di repositori saya.

Gambar dasar dengan desktop Gihub Dockerhub .

Gambar dengan alat bantu Script dan C # Gihub Dockerhub .

All Articles