Как запустить пользовательское приложение в контейнере Docker с пользовательским портом

DockerBeginner
Практиковаться сейчас

Введение

Docker — это мощная платформа для создания, развертывания и запуска приложений в контейнерной среде. В этом руководстве вы узнаете, как запустить пользовательское приложение в контейнере Docker и открыть пользовательский порт для внешнего доступа. К концу этого руководства вы получите глубокое понимание того, как использовать Docker для развертывания ваших приложений с большей гибкостью и контролем.

Введение в Docker и контейнеры

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

Что такое Docker?

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

Преимущества использования Docker

  1. Согласованность: Контейнеры гарантируют, что ваше приложение будет работать одинаково независимо от среды развертывания.
  2. Масштабируемость: Контейнеры можно легко масштабировать вверх или вниз, чтобы удовлетворить потребности вашего приложения.
  3. Переносимость: Контейнеры можно запускать на любой системе, на которой установлен Docker, что упрощает перемещение вашего приложения между различными средами.
  4. Эффективность: Контейнеры лёгкие и используют меньше ресурсов, чем виртуальные машины, что делает их более эффективными в работе.

Архитектура Docker

Docker использует архитектуру клиент-сервер, где клиент Docker взаимодействует с демоном Docker, который отвечает за создание, запуск и распространение контейнеров Docker.

graph LR
    subgraph Docker Architecture
        client((Клиент Docker))
        daemon((Дэмон Docker))
        registry((Репозиторий Docker))
        client --> daemon
        daemon --> registry
    end

Контейнеры Docker

Контейнеры Docker — это основные строительные блоки Docker. Контейнер — это стандартная единица программного обеспечения, которая упаковывает код и все его зависимости, чтобы приложение быстро и надёжно работало в любой вычислительной среде.

graph LR
    subgraph Docker Container
        app((Приложение))
        runtime((Среда выполнения))
        libs((Библиотеки))
        bin((Бинарные файлы))
    end

Образы Docker

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

Запуск пользовательского приложения в Docker

Создание пользовательского образа Docker

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

Вот пример Dockerfile для простого веб-приложения Flask:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Этот Dockerfile:

  1. Начинает работу с базовым образом python:3.9-slim
  2. Устанавливает рабочую директорию в /app
  3. Копирует файл requirements.txt и устанавливает необходимые пакеты Python
  4. Копирует код приложения в контейнер
  5. Указывает команду для запуска приложения (python app.py)

Сборка и запуск образа Docker

После создания Dockerfile вы можете собрать образ Docker с помощью команды docker build:

docker build -t my-flask-app .

Это создаст новый образ Docker с тэгом my-flask-app.

Чтобы запустить приложение в контейнере Docker, используйте команду docker run:

docker run -p 5000:5000 my-flask-app

Это запустит новый контейнер на основе образа my-flask-app и отобразит порт 5000 на хосте на порт 5000 в контейнере.

Проверка приложения

Теперь вы можете получить доступ к работающему приложению в вашем веб-браузере, перейдя по адресу http://localhost:5000. Вы должны увидеть вывод вашего приложения Flask.

Открытие пользовательского порта

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

Открытие порта

Для открытия порта из контейнера Docker можно использовать флаг -p или --publish при выполнении команды docker run. Синтаксис:

docker run -p <порт_хоста>:<порт_контейнера> <имя_изображения>

Например, если ваше приложение работает на порту 8000 внутри контейнера, вы можете открыть его на порту 80 на хост-системе следующим образом:

docker run -p 80:8000 my-app

Это отобразит порт 80 на хост-системе на порт 8000 внутри контейнера.

Проверка открытого порта

Вы можете проверить, что порт был открыт правильно, проверив вывод команды docker run, который должен отобразить сопоставленные порты:

$ docker run -p 80:8000 my-app
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

В качестве альтернативы, можно использовать команду docker port для отображения сопоставленных портов для работающего контейнера:

$ docker port <идентификатор_контейнера>
8000/tcp -> 0.0.0.0:80

Это показывает, что порт 8000 внутри контейнера сопоставлен с портом 80 на хост-системе.

Теперь вы можете получить доступ к вашему приложению, перейдя по адресу http://localhost (или IP-адресу хост-системы) в вашем веб-браузере.

Резюме

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