Запуск контейнеризированного приложения на виртуальной машине с помощью Docker и Docker Compose
В этой лабораторной работе вы соберете контейнеризированное приложение и запустите его на виртуальной машине.
Для этого вы будете использовать следующие сервисы:
-
Виртуальная машина free tier — сервис, в рамках которого предоставляется бесплатная виртуальная машина с готовой конфигурацией.
-
Публичный IP-адрес для доступа к приложению из интернета.
-
Docker.
-
Docker Compose.
Шаги:
Перед началом работы
Если вы уже зарегистрированы, войдите под своей учетной записью.
1. Разверните ресурсы в облаке
-
Загрузите публичный ключ в облако Cloud.ru Evolution.
-
Создайте бесплатную виртуальную машину со следующими параметрами:
-
В поле Название укажите название виртуальной машины, например docker-server.
-
На вкладке Публичные выберите образ Ubuntu 22.04.
-
Назначьте публичный IP-адрес виртуальной машине — оставьте включенной опцию Подключить публичный IP. Для виртуальной машины будет арендован и назначен прямой публичный IP.
-
В поле Логин укажите имя пользователя виртуальной машины, например user1.
-
Выберите метод аутентификации — публичный ключ.
-
В поле Публичный ключ выберите ключ, загруженный на предыдущем шаге.
-
Убедитесь, что в личном кабинете на странице сервиса «Виртуальные машины»:
-
отображается виртуальная машина docker-server;
-
статус виртуальной машины — «Запущена»;
-
виртуальной машине назначен публичный IP-адрес.
2. Настройте группу безопасности
Группы безопасности в облаке Cloud.ru Evolution позволяют контролировать входящий и исходящий трафик для создаваемых ресурсов.
Вы настроите правила фильтрации трафика — разрешите весь входящий трафик по порту 80 и весь исходящий трафик. Создайте группу безопасности со следующими параметрами:
-
В поле Зона доступности укажите ту же зону, что выбрана для виртуальной машины.
-
Укажите Название группы безопасности.
-
Добавьте правила входящего и исходящего трафика.
Правило входящего трафика:
-
Протокол — «TCP».
-
Порт — «80».
-
Тип источника — «IP-адрес».
-
Источник — «0.0.0.0/0».
Правило исходящего трафика:
-
Протокол — «Любой».
-
Порт — оставьте пустым.
-
Тип адресата — «IP-адрес».
-
Адресат — «0.0.0.0/0».
-
-
Назначьте созданную группу безопасности виртуальной машине. Если в группе безопасности присутствуют другие виртуальные машины, исключите их из группы.
Убедитесь, что в личном кабинете на странице сервиса «Виртуальные машины» в разделе Сетевые параметры отображается группа безопасности.
3. Установите Docker Engine
-
В командной строке выполните команду:
curl -fsSL get.docker.com -o get-docker.sh && sudo sh get-docker.sh
4. Создайте и запустите контейнер с помощью средств Docker
-
Создайте директорию containerapp и перейдите в нее. В командной строке выполните команду:
mkdir containerapp && cd containerapp -
Создайте файл Dockerfile:
sudo nano Dockerfile -
В открывшемся редакторе nano вставьте текст:
FROM tiangolo/uwsgi-nginx-flask:python3.12COPY ./app /app -
Нажмите комбинацию клавиш Ctrl + O, чтобы сохранить файл.
-
Нажмите комбинацию клавиш Ctrl + X, чтобы выйти из редактора nano.
-
Создайте директорию для приложения app и перейдите в нее:
mkdir app && cd app -
Создайте python-файл приложения:
sudo nano main.py -
В открывшемся окне редактора вставьте код:
from flask import Flaskapp = Flask(__name__)@app.route("/")def hello():return "Hello World from Flask"if __name__ == "__main__":app.run(host='0.0.0.0', debug=True, port=80) -
Вернитесь на уровень выше — в директорию containerapp:
cd .. -
Соберите образ контейнера:
sudo docker build -t containerapp . -
После того как сборка образа закончится, запустите контейнер на виртуальной машине:
sudo docker run -d --name containerapp -p 80:80 containerapp -
Убедитесь, что созданный мини-сайт доступен по публичному адресу виртуальной машины. В браузере перейдите по адресу http://<публичный_IP_виртуальной_машины> — откроется страница с текстом «Hello World from Flask».
5. Создайте приложение с помощью Docker Compose
-
Остановите и удалите контейнер Docker. В командной строке выполните команду:
sudo docker rm -f containerapp -
Установите docker-compose:
sudo apt install docker-compose -
Создайте файл docker-compose в директории containerapp:
sudo nano docker-compose.yaml -
Вставьте в созданный файл описание создаваемого контейнера:
version: '3.8'services:flask-app:image: tiangolo/uwsgi-nginx-flask:python3.12ports:- "80:80"volumes:- ./app/main.py:/app/main.py -
Запустите контейнер с помощью docker-compose:
sudo docker-compose up -d flask-app -
Убедитесь, что приложение успешно запущено, — в браузере перейдите по адресу http://<публичный_IP_виртуальной_машины>. Если все предыдущие шаги были выполнены корректно, на странице браузера отобразится следующий текст:
Что дальше
В этой лабораторной работе вы создали виртуальную машину и запустили контейнеризированное приложение с помощью Docker и Docker Compose. Узнавайте больше о работе с сервисами и получайте практические навыки управления облаком, выполняя лабораторные работы.
- Перед началом работы
- 1. Разверните ресурсы в облаке
- 2. Настройте группу безопасности
- 3. Установите Docker Engine
- 4. Создайте и запустите контейнер с помощью средств Docker
- 5. Создайте приложение с помощью Docker Compose
- Что дальше