Введение
Docker — это мощная платформа для создания, развертывания и запуска приложений в контейнерной среде. В этом руководстве вы узнаете, как запустить пользовательское приложение в контейнере Docker и открыть пользовательский порт для внешнего доступа. К концу этого руководства вы получите глубокое понимание того, как использовать Docker для развертывания ваших приложений с большей гибкостью и контролем.
Введение в Docker и контейнеры
Docker — это популярная открытая платформа, которая позволяет разрабатывать, развертывать и управлять приложениями с помощью контейнеров. Контейнеры — это лёгкие, автономные и исполняемые программные пакеты, содержащие всё необходимое для работы приложения, включая код, среду выполнения, системные инструменты и библиотеки.
Что такое Docker?
Docker — это инструмент, разработанный для упрощения создания, развертывания и запуска приложений с помощью контейнеров. Контейнеры позволяют разработчику упаковать приложение со всеми необходимыми компонентами, такими как библиотеки и другие зависимости, и отправить всё это как один пакет.
Преимущества использования Docker
- Согласованность: Контейнеры гарантируют, что ваше приложение будет работать одинаково независимо от среды развертывания.
- Масштабируемость: Контейнеры можно легко масштабировать вверх или вниз, чтобы удовлетворить потребности вашего приложения.
- Переносимость: Контейнеры можно запускать на любой системе, на которой установлен Docker, что упрощает перемещение вашего приложения между различными средами.
- Эффективность: Контейнеры лёгкие и используют меньше ресурсов, чем виртуальные машины, что делает их более эффективными в работе.
Архитектура 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:
- Начинает работу с базовым образом
python:3.9-slim - Устанавливает рабочую директорию в
/app - Копирует файл
requirements.txtи устанавливает необходимые пакеты Python - Копирует код приложения в контейнер
- Указывает команду для запуска приложения (
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 предоставляет мощную платформу для разработчиков, позволяя им создавать, распространять и запускать свои приложения более эффективно и оптимизированно.



