Перейти к содержимому
Главная страница » Как получить удалённый доступ к приложениям с интерфейсом с помощью Docker и Caddy

Как получить удалённый доступ к приложениям с интерфейсом с помощью Docker и Caddy

Введение

Несмотря на растущую популярность облачных сервисов, потребность в запуске собственных приложений всё ещё существует.

Используя noVNC и TigerVNC, вы можете запускать собственные приложения внутри контейнера Docker и получать к ним удалённый доступ с помощью веб-браузера. Кроме того, вы можете запускать своё приложение на сервере с большим количеством системных ресурсов, чем у вас может быть локально, что обеспечивает большую гибкость при запуске крупных приложений.

В этом руководстве вы создадите контейнер Mozilla Thunderbird, почтового клиента, с помощью Docker. Затем вы защитите его и обеспечите удалённый доступ с помощью веб-сервера Caddy.

Когда вы закончите, вы сможете получить доступ к Thunderbird с любого устройства, используя только веб-браузер. При желании вы также сможете получить локальный доступ к файлам с помощью WebDAV. У вас также будет полностью автономный образ Docker, который вы сможете запускать где угодно.

Предварительные условия

Прежде чем вы приступите к выполнению этого руководства, вам понадобится следующее:

  • Один сервер Ubuntu 20.04 с оперативной памятью не менее 2 ГБ и дисковым пространством не менее 4 ГБ.
  • Пользователь без права root с sudo привилегиями.
  • Docker настроен на вашем сервере. Вы можете следовать инструкциям по установке и использованию Docker в Ubuntu 20.04.

Создание supervisord Конфигурация

Теперь, когда ваш сервер запущен и Docker установлен, вы готовы приступить к настройке контейнера вашего приложения. Поскольку ваш контейнер состоит из нескольких компонентов, вам нужно использовать менеджер процессов для их запуска и мониторинга. Здесь вы будете использовать supervisordsupervisord — это менеджер процессов, написанный на Python, который часто используется для управления сложными контейнерами.

Сначала создайте и введите каталог с именем thunderbird для вашего контейнера:

mkdir ~/thunderbird
cd ~/thunderbird

Теперь создайте и откройте файл с именем supervisord.conf используя nano или предпочитаемый вами редактор:

nano ~/thunderbird/supervisord.conf

Теперь добавьте этот первый блок кода в supervisord.conf, который определит глобальные параметры для supervisor:

~/thunderbird/supervisord.conf

[supervisord]
nodaemon=true
pidfile=/tmp/supervisord.pid
logfile=/dev/fd/1
logfile_maxbytes=0

В этом блоке вы настраиваете supervisord сам. Вам нужно установить nodaemon на true, потому что он будет работать внутри контейнера Docker в качестве точки входа. Поэтому вы хотите, чтобы он оставался запущенным на переднем плане. Вы также устанавливаете pidfile на путь, доступный пользователю без прав root (подробнее об этом позже), и logfile на стандартный вывод, чтобы вы могли просматривать журналы.

Затем добавьте ещё один небольшой блок кода в supervisord.conf. Этот блок запускает TigerVNC — комбинированный сервер VNC/X11:

~/thunderbird/supervisord.conf

...
[program:x11]
priority=0
command=/usr/bin/Xtigervnc -desktop "Thunderbird" -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

В этом блоке вы настраиваете сервер X11. X11 — это протокол сервера отображения, который позволяет запускать приложения с графическим интерфейсом. Обратите внимание, что в будущем он будет заменён на Wayland, но удалённый доступ всё ещё находится в разработке.

Для этого контейнера вы используете TigerVNC и его встроенный сервер VNC. Это даёт ряд преимуществ по сравнению с использованием отдельного сервера X11 и VNC:

  • Более быстрое время отклика, так как отрисовка графического интерфейса выполняется непосредственно на сервере VNC, а не в промежуточном фреймбуфере (памяти, в которой хранится содержимое экрана).
  • Автоматическое изменение размера экрана, которое позволяет удалённому приложению автоматически изменять размер в соответствии с размерами клиента (в данном случае — окна вашего веб-браузера).

При желании вы можете изменить аргумент для опции -desktop с Thunderbird на что-то другое по вашему выбору. Сервер отобразит ваш выбор в качестве заголовка веб-страницы, используемой для доступа к вашему приложению.

Теперь давайте добавим третий блок кода в supervisord.conf для запуска easy-novnc:

~/thunderbird/supervisord.conf

...
[program:easy-novnc]
priority=0
command=/usr/local/bin/easy-novnc --addr :8080 --host localhost --port 5900 --no-url-password --novnc-params "resize=remote"
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

В этом блоке вы настраиваете easy-novnc — автономный сервер, который предоставляет оболочку для noVNC. Этот сервер выполняет две функции. Во-первых, он предоставляет простую страницу подключения, которая позволяет настраивать параметры подключения и задавать их по умолчанию. Во-вторых, он проксирует VNC через WebSocket, что позволяет получить к нему доступ через обычный веб-браузер.

Обычно изменение размера происходит на стороне клиента (т. е. масштабирование изображения), но вы используете опцию resize=remote для того, чтобы в полной мере воспользоваться преимуществами удалённой настройки разрешения в TigerVNC. Это также обеспечивает меньшую задержку на более медленных устройствах, таких как бюджетные Chromebook:

Примечание: в этом руководстве используется easy-novnc. При желании вы можете использовать websockify и отдельный веб-сервер. Преимущество easy-novnc заключается в том, что он значительно меньше использует память и запускается быстрее, а также является автономным. easy-novnc также предоставляет более чистую страницу подключения, чем стандартная страница noVNC, и позволяет задавать параметры по умолчанию, которые полезны для этой настройки (например, resize=remote).

Теперь добавьте в свою конфигурацию следующий блок для запуска OpenBox, оконного менеджера:

~/thunderbird/supervisord.conf

...
[program:openbox]
priority=1
command=/usr/bin/openbox
environment=DISPLAY=:0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

В этом блоке вы настраиваете OpenBox, облегчённый оконный менеджер X11. Вы можете пропустить этот шаг, но без него у вас не будет строк заголовка и возможности изменять размер окон.

Наконец, давайте добавим последний блок в supervisord.conf, который запустит основное приложение:

~/thunderbird/supervisord.conf

...
[program:app]
priority=1
environment=DISPLAY=:0
command=/usr/bin/thunderbird
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

В этом последнем блоке вы устанавливаете priority для 1 так, чтобы Thunderbird запускался после TigerVNC, иначе он может столкнуться с состоянием гонки и случайным образом не запуститься. Мы также устанавливаем autorestart=true для автоматического повторного открытия приложения, если оно по ошибке закроется. Переменная среды DISPLAY указывает приложению отображать данные на сервере VNC, который вы настроили ранее.

Вот как будет выглядеть ваш завершенный supervisord.conf проект:

~/thunderbird/supervisord.conf

[supervisord]
nodaemon=true
pidfile=/tmp/supervisord.pid
logfile=/dev/fd/1
logfile_maxbytes=0

[program:x11]
priority=0
command=/usr/bin/Xtigervnc -desktop "Thunderbird" -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

[program:easy-novnc]
priority=0
command=/usr/local/bin/easy-novnc --addr :8080 --host localhost --port 5900 --no-url-password --novnc-params "resize=remote"
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

[program:openbox]
priority=1
command=/usr/bin/openbox
environment=DISPLAY=:0
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

[program:app]
priority=1
environment=DISPLAY=:0
command=/usr/bin/thunderbird
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true

Если вы хотите создать контейнер для другого приложения, замените /usr/bin/thunderbird на путь к исполняемому файлу вашего приложения. В противном случае вы готовы настроить главное меню вашего графического интерфейса.

Настройка меню OpenBox

Теперь, когда ваш менеджер процессов настроен, давайте настроим меню OpenBox. Это меню позволяет запускать приложения внутри контейнера. При необходимости мы также добавим терминал и монитор процессов для отладки.

В каталоге вашего приложения с помощью nano или вашего любимого текстового редактора создайте и откройте новый файл с именем menu.xml:

nano ~/thunderbird/menu.xml

Теперь добавьте следующий код в menu.xml:

~/thunderbird/menu.xml

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
    <menu id="root-menu" label="Openbox 3">
        <item label="Thunderbird">
            <action name="Execute">
                <execute>/usr/bin/thunderbird</execute>
            </action>
        </item>
        <item label="Terminal">
            <action name="Execute">
                <execute>/usr/bin/x-terminal-emulator</execute>
            </action>
        </item>
        <item label="Htop">
            <action name="Execute">
                <execute>/usr/bin/x-terminal-emulator -e htop</execute>
            </action>
        </item>
    </menu>
</openbox_menu>

Этот XML-файл содержит пункты меню, которые будут отображаться при щелчке правой кнопкой мыши на рабочем столе. Каждый пункт состоит из заголовка и действия.

Если вы хотите создать контейнер для другого приложения, замените /usr/bin/thunderbird на путь к исполняемому файлу вашего приложения и измените label в элементе.

Создание файла Dockerfile

Теперь, когда OpenBox настроен, вы создадите Dockerfile, который объединит всё в единое целое.

Создайте Dockerfile в каталоге вашего контейнера:

nano ~/thunderbird/Dockerfile

Для начала давайте добавим немного кода для сборки easy-novnc:

~/thunderbird/Файл Dockerfile

FROM golang:1.14-buster AS easy-novnc-build
WORKDIR /src
RUN go mod init build && \
    go get github.com/geek1011/easy-novnc@v1.1.0 && \
    go build -o /bin/easy-novnc github.com/geek1011/easy-novnc

На первом этапе вы создаёте easy-novnc. Это делается на отдельном этапе для простоты и экономии места — вам не нужна вся цепочка инструментов Go в конечном образе. Обратите внимание на @v1.1.0 в команде сборки. Это гарантирует детерминированный результат, что важно, поскольку Docker кэширует результат каждого этапа. Если бы вы не указали явную версию, Docker ссылался бы на последнюю версию easy-novnc на момент создания образа. Кроме того, вам нужно убедиться, что вы загружаете конкретную версию easy-novnc, на случай, если в интерфейс командной строки будут внесены критические изменения.

Теперь давайте создадим второй этап, который станет финальным образом. Здесь вы будете использовать Debian 10 (buster) в качестве базового образа. Обратите внимание, что, поскольку он работает в контейнере, он будет работать независимо от дистрибутива, который вы используете на своём сервере.

Затем добавьте следующий блок в свой Dockerfile:

~/thunderbird/Файл Dockerfile

...
FROM debian:buster
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu && \
    rm -rf /var/lib/apt/lists && \
    mkdir -p /usr/share/desktop-directories

В этой инструкции вы устанавливаете Debian 10 в качестве базового образа, а затем устанавливаете минимальный набор программ, необходимых для запуска приложений с графическим интерфейсом в вашем контейнере. Обратите внимание, что вы запускаете apt-get update как часть той же инструкции, чтобы избежать проблем с кэшированием в Docker. Чтобы сэкономить место, вы также удаляете списки пакетов, загруженные позже (сами кэшированные пакеты удаляются по умолчанию). Вы также создаёте /usr/share/desktop-directories потому, что некоторые приложения зависят от существования каталога.

Давайте добавим еще один небольшой блок кода:

~/thunderbird/Файл Dockerfile

...
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip && \
    rm -rf /var/lib/apt/lists

В этой инструкции вы устанавливаете несколько полезных утилит и пакетов общего назначения. Особый интерес здесь представляют xdg-utils (которая предоставляет базовые команды, используемые настольными приложениями в Linux) и ca-certificates (которая устанавливает корневые сертификаты, позволяющие нам получать доступ к сайтам HTTPS).

Теперь мы можем добавить инструкции для основного приложения:

~/thunderbird/Файл Dockerfile

...
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends thunderbird && \
    rm -rf /var/lib/apt/lists

Как и прежде, здесь мы устанавливаем приложение. Если вы создаёте контейнер для другого приложения, вы можете заменить эти команды на те, которые требуются для установки вашего конкретного приложения. Для запуска некоторых приложений в Docker потребуется немного больше усилий. Например, если вы устанавливаете приложение, использующее Chrome, Chromium или QtWebEngine, вам нужно будет использовать аргумент командной строки --no-sandbox, поскольку он не поддерживается в Docker.

Далее давайте добавим инструкции по добавлению последних нескольких файлов в контейнер:

~/thunderbird/Файл Dockerfile

...
COPY --from=easy-novnc-build /bin/easy-novnc /usr/local/bin/
COPY menu.xml /etc/xdg/openbox/
COPY supervisord.conf /etc/
EXPOSE 8080

Здесь вы добавляете файлы конфигурации, которые создали ранее, в образ и копируете двоичный файл easy-novnc с первого этапа.

Следующий блок кода создаёт каталог данных и добавляет выделенного пользователя для вашего приложения. Это важно, потому что некоторые приложения отказываются работать от имени пользователя root. Также рекомендуется не запускать приложения от имени пользователя root, даже в контейнере.

~/thunderbird/Файл Dockerfile

...
RUN groupadd --gid 1000 app && \
    useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && \
    mkdir -p /data
VOLUME /data

Чтобы обеспечить согласованность UID/GID для файлов, вы явно устанавливаете для обоих значений 1000. Вы также монтируете том в каталоге данных, чтобы он сохранялся между перезапусками.

Наконец, давайте добавим инструкции по запуску всего:

~/thunderbird/Файл Dockerfile

...
CMD ["sh", "-c", "chown app:app /data /dev/stdout && exec gosu app supervisord"]

Если вы установите команду по умолчанию на supervisord, менеджер запустит процессы, необходимые для работы вашего приложения. В этом случае вы используете CMD вместо ENTRYPOINT. В большинстве случаев это не имеет значения, но CMD лучше подходит для этой цели по нескольким причинам. Во-первых, supervisord не принимает никаких аргументов, которые были бы важны для нас, а если вы предоставляете аргументы контейнеру, они заменяют CMD и добавляются к ENTRYPOINT. Во-вторых, использование CMD позволяет нам указать совершенно другую команду (которая будет выполняться /bin/sh -c при передаче аргументов в контейнер), что упрощает отладку.

И наконец, перед запуском chown вам нужно запустить supervisord от имени пользователя root, чтобы предотвратить проблемы с правами доступа к диску с данными и позволить дочерним процессам открывать stdout. Это также означает, что вам нужно использовать gosu вместо инструкции USER для переключения пользователя.

Вот как будет выглядеть ваш завершенный Dockerfile проект:

~/thunderbird/Файл Dockerfile

FROM golang:1.14-buster AS easy-novnc-build
WORKDIR /src
RUN go mod init build && \
    go get github.com/geek1011/easy-novnc@v1.1.0 && \
    go build -o /bin/easy-novnc github.com/geek1011/easy-novnc

FROM debian:buster

RUN apt-get update -y && \
    apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu && \
    rm -rf /var/lib/apt/lists && \
    mkdir -p /usr/share/desktop-directories

RUN apt-get update -y && \
    apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip && \
    rm -rf /var/lib/apt/lists

RUN apt-get update -y && \
    apt-get install -y --no-install-recommends thunderbird && \
    rm -rf /var/lib/apt/lists

COPY --from=easy-novnc-build /bin/easy-novnc /usr/local/bin/
COPY menu.xml /etc/xdg/openbox/
COPY supervisord.conf /etc/
EXPOSE 8080

RUN groupadd --gid 1000 app && \
    useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && \
    mkdir -p /data
VOLUME /data

CMD ["sh", "-c", "chown app:app /data /dev/stdout && exec gosu app supervisord"]

Сохраните и закройте Dockerfile. Теперь мы готовы создать и запустить наш контейнер, а затем получить доступ к Thunderbird — приложению с графическим интерфейсом.

Создание и запуск контейнера

Следующий шаг — создать контейнер и настроить его запуск при старте системы. Вы также настроите том для сохранения данных приложения между перезапусками и обновлениями.

Сначала создайте свой контейнер. Убедитесь, что вы выполняете эти команды в каталоге ~/thunderbird:

docker build -t thunderbird .

Теперь создайте новую сеть, которой будут совместно пользоваться контейнеры приложения:

docker network create thunderbird-net

Затем создайте том для хранения данных приложения:

docker volume create thunderbird-data

Наконец, запустите его и установите на автоматический перезапуск:

docker run --detach --restart=always --volume=thunderbird-data:/data --net=thunderbird-net --name=thunderbird-app thunderbird

Обратите внимание, что при желании вы можете заменить thunderbird-app после опции --name на другое имя. Что бы вы ни выбрали, ваше приложение теперь запущено в контейнере. Теперь давайте воспользуемся веб-сервером Caddy, чтобы защитить его и подключиться к нему удалённо.

Настройка Caddy

На этом этапе вы настроите веб-сервер Caddy для обеспечения аутентификации и, при необходимости, удалённого доступа к файлам через WebDAV. Для простоты и чтобы можно было использовать его с существующим обратным прокси-сервером, вы запустите его в другом контейнере.

Создайте новый каталог, а затем переместитесь внутрь него:

mkdir ~/caddy
cd ~/caddy

Теперь создайте новый, Dockerfile используя nano или предпочитаемый вами редактор:

nano ~/caddy/Dockerfile

Затем добавьте следующие директивы:

~/caddy/Файл Dockerfile

FROM golang:1.14-buster AS caddy-build
WORKDIR /src
RUN echo 'module caddy' > go.mod && \
    echo 'require github.com/caddyserver/caddy/v2 v2.1.1' >> go.mod && \
    echo 'require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3' >> go.mod
RUN echo 'package main' > caddy.go && \
    echo 'import caddycmd "github.com/caddyserver/caddy/v2/cmd"' >> caddy.go && \
    echo 'import _ "github.com/caddyserver/caddy/v2/modules/standard"' >> caddy.go && \
    echo 'import _ "github.com/mholt/caddy-webdav"' >> caddy.go && \
    echo 'func main() { caddycmd.Main() }' >> caddy.go
RUN go build -o /bin/caddy .

FROM debian:buster

RUN apt-get update -y && \
    apt-get install -y --no-install-recommends gosu && \
    rm -rf /var/lib/apt/lists

COPY --from=caddy-build /bin/caddy /usr/local/bin/
COPY Caddyfile /etc/
EXPOSE 8080

RUN groupadd --gid 1000 app && \
    useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && \
    mkdir -p /data
VOLUME /data

WORKDIR /data
CMD ["sh", "-c", "chown app:app /data && exec gosu app /usr/local/bin/caddy run -adapter caddyfile -config /etc/Caddyfile"]

Этот Dockerfile создаёт Caddy с включённым плагином WebDAV, а затем запускает его на порту 8080 с Caddyfile по адресу /etc/Caddyfile. Сохраните и закройте файл.

Далее вы настроите веб-сервер Caddy. Создайте файл с именем Caddyfile в только что созданном каталоге:

nano ~/caddy/Caddyfile

Теперь добавьте следующий блок кода в свой Caddyfile:

~/caddy/Файл Caddyfile

{
    order webdav last
}
:8080 {
    log
    root * /data
    reverse_proxy thunderbird-app:8080

    handle_path /files/* {         
        file_server browse
    }
    redir /files /files/

    handle /webdav/* {
        webdav {             
            prefix /webdav         
        }
    }
    redir /webdav /webdav/

    basicauth /* {
        {env.APP_USERNAME} {env.APP_PASSWORD_HASH}
    }
}

Этот Caddyfile прокси-сервер перенаправляет корневой каталог в thunderbird-app контейнер, который вы создали на шаге 4 (Docker преобразует его в правильный IP-адрес). Он также будет обслуживать веб-браузер для просмотра файлов только для чтения на /files и запускать сервер WebDAV на /webdav который вы можете подключить локально для доступа к вашим файлам. Имя пользователя и пароль считываются из переменных среды APP_USERNAME и APP_PASSWORD_HASH.

Теперь постройте контейнер:

docker build -t thunderbird-caddy .

Caddy v2 требует, чтобы вы хешировали нужный вам пароль. Выполните следующую команду и не забудьте заменить mypass на надёжный пароль по вашему выбору:

docker run --rm -it thunderbird-caddy caddy hash-password -plaintext 'mypass'

Эта команда выведет на экран строку символов. Скопируйте её в буфер обмена, чтобы выполнить следующую команду.

Теперь вы готовы запустить контейнер. Не забудьте заменить myuser на выбранное вами имя пользователя, а mypass-hash — на результат выполнения команды, которую вы запустили на предыдущем шаге. Вы также можете изменить порт (8080 здесь), чтобы получить доступ к серверу через другой порт:

docker run --detach --restart=always --volume=thunderbird-data:/data --net=thunderbird-net --name=thunderbird-web --env=APP_USERNAME="myuser" --env=APP_PASSWORD_HASH="mypass-hash" --publish=8080:8080 thunderbird-caddy

Теперь мы готовы получить доступ к нашему приложению и протестировать его.

Тестирование и управление приложением

Давайте получим доступ к вашему приложению и убедимся, что оно работает.

Сначала откройте http://your_server_ip:8080 в веб-браузере, войдите в систему, используя выбранные ранее учётные данные, и нажмите «Подключиться».

Теперь вы должны иметь возможность взаимодействовать с приложением, и оно должно автоматически подстраиваться под размер окна вашего браузера.

Если вы щёлкнете правой кнопкой мыши по чёрному рабочему столу, вы увидите меню, позволяющее получить доступ к терминалу. Если вы щёлкнете средней кнопкой мыши, вы увидите список окон.

Теперь откройте http://your_server_ip:8080/files/ в веб-браузере. Вы должны получить доступ к своим файлам.

При желании вы можете попробовать подключить http://your_server_ip:8080/webdav/ в клиенте WebDAV. Вы сможете напрямую получать доступ к своим файлам и изменять их. Если вы используете опцию «Подключить сетевой диск» в проводнике Windows, вам потребуется либо использовать обратный прокси-сервер для добавления HTTPS, либо установить HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel на DWORD:2.

В любом случае, ваше родное приложение с графическим интерфейсом теперь готово к удаленному использованию.

Заключение

Теперь вы успешно настроили контейнер Docker для Thunderbird, а затем с помощью Caddy настроили доступ к нему через веб-браузер. Если вам когда-нибудь понадобится обновить приложение, остановите контейнеры, запустите docker rm thunderbird-app thunderbird-web, пересоберите образы, а затем повторно выполните docker run команды из предыдущих шагов. Ваши данные будут сохранены, так как они хранятся в томе.

Если вы хотите узнать больше об основных командах Docker, вы можете прочитать это руководство или эту шпаргалку. Для долгосрочного использования вы также можете рассмотреть возможность включения HTTPS (для этого требуется домен) для дополнительной безопасности.

Кроме того, если вы развёртываете несколько приложений, вы можете использовать Docker Compose или Kubernetes вместо того, чтобы запускать каждый контейнер вручную. И помните, что это руководство может служить основой для запуска любого другого приложения Linux на вашем сервере, в том числе:

  • Wine, уровень совместимости для запуска приложений Windows в Linux.
  • GIMP, графический редактор с открытым исходным кодом.
  • Cutter — платформа обратного инжиниринга с открытым исходным кодом.

Этот последний вариант демонстрирует большой потенциал контейнеризации и удалённого доступа к приложениям с графическим интерфейсом. С помощью такой настройки вы можете использовать сервер с гораздо большей вычислительной мощностью, чем у вас есть локально, для запуска ресурсоёмких инструментов, таких как Cutter.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *