Evolution
Тема интерфейса

Запуск контейнеризированного приложения на виртуальной машине с помощью Docker и Docker Compose

В этой лабораторной работе вы соберете контейнеризированное приложение и запустите его на виртуальной машине.

Для этого вы будете использовать следующие сервисы:

Шаги:

Перед началом работы

Если вы уже зарегистрированы, войдите под своей учетной записью.

1. Разверните ресурсы в облаке

  1. Создайте бесплатную виртуальную машину со следующими параметрами:

    1. В поле Название укажите название виртуальной машины, например docker-server.

    2. На вкладке Публичные выберите образ Ubuntu 22.04.

    3. Назначьте публичный IP-адрес виртуальной машине — оставьте включенной опцию Подключить публичный IP. Для виртуальной машины будет арендован и назначен прямой публичный IP.

    4. В поле Логин укажите имя пользователя виртуальной машины, например user1.

    5. Выберите метод аутентификации — публичный ключ.

    6. В поле Публичный ключ выберите ключ, загруженный на предыдущем шаге.

Убедитесь, что в личном кабинете на странице сервиса «Виртуальные машины»:

  • отображается виртуальная машина docker-server;

  • статус виртуальной машины — «Запущена»;

  • виртуальной машине назначен публичный IP-адрес.

2. Настройте группу безопасности

Группы безопасности в облаке Cloud.ru Evolution позволяют контролировать входящий и исходящий трафик для создаваемых ресурсов.

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

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

  2. Укажите Название группы безопасности.

  3. Добавьте правила входящего и исходящего трафика.

    Правило входящего трафика:

    • Протокол — «TCP».

    • Порт — «80».

    • Тип источника — «IP-адрес».

    • Источник — «0.0.0.0/0».

    Правило исходящего трафика:

    • Протокол — «Любой».

    • Порт — оставьте пустым.

    • Тип адресата — «IP-адрес».

    • Адресат — «0.0.0.0/0».

  4. Назначьте созданную группу безопасности виртуальной машине. Если в группе безопасности присутствуют другие виртуальные машины, исключите их из группы.

Убедитесь, что в личном кабинете на странице сервиса «Виртуальные машины» в разделе Сетевые параметры отображается группа безопасности.

3. Установите Docker Engine

  1. В командной строке выполните команду:

    curl -fsSL get.docker.com -o get-docker.sh && sudo sh get-docker.sh

4. Создайте и запустите контейнер с помощью средств Docker

  1. Создайте директорию containerapp и перейдите в нее. В командной строке выполните команду:

    mkdir containerapp && cd containerapp
  2. Создайте файл Dockerfile:

    sudo nano Dockerfile
  3. В открывшемся редакторе nano вставьте текст:

    FROM tiangolo/uwsgi-nginx-flask:python3.12
    COPY ./app /app
  4. Нажмите комбинацию клавиш Ctrl + O, чтобы сохранить файл.

  5. Нажмите комбинацию клавиш Ctrl + X, чтобы выйти из редактора nano.

  6. Создайте директорию для приложения app и перейдите в нее:

    mkdir app && cd app
  7. Создайте python-файл приложения:

    sudo nano main.py
  8. В открывшемся окне редактора вставьте код:

    from flask import Flask
    app = 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)
  9. Вернитесь на уровень выше — в директорию containerapp:

    cd ..
  10. Соберите образ контейнера:

    sudo docker build -t containerapp .
  11. После того как сборка образа закончится, запустите контейнер на виртуальной машине:

    sudo docker run -d --name containerapp -p 80:80 containerapp
  12. Убедитесь, что созданный мини-сайт доступен по публичному адресу виртуальной машины. В браузере перейдите по адресу http://<публичный_IP_виртуальной_машины> — откроется страница с текстом «Hello World from Flask».

5. Создайте приложение с помощью Docker Compose

  1. Остановите и удалите контейнер Docker. В командной строке выполните команду:

    sudo docker rm -f containerapp
  2. Установите docker-compose:

    sudo apt install docker-compose
  3. Создайте файл docker-compose в директории containerapp:

    sudo nano docker-compose.yaml
  4. Вставьте в созданный файл описание создаваемого контейнера:

    version: '3.8'
    services:
    flask-app:
    image: tiangolo/uwsgi-nginx-flask:python3.12
    ports:
    - "80:80"
    volumes:
    - ./app/main.py:/app/main.py
  5. Запустите контейнер с помощью docker-compose:

    sudo docker-compose up -d flask-app
  6. Убедитесь, что приложение успешно запущено, — в браузере перейдите по адресу http://<публичный_IP_виртуальной_машины>. Если все предыдущие шаги были выполнены корректно, на странице браузера отобразится следующий текст:

    ../_images/img__docker__hello-page.png

Что дальше

В этой лабораторной работе вы создали виртуальную машину и запустили контейнеризированное приложение с помощью Docker и Docker Compose. Узнавайте больше о работе с сервисами и получайте практические навыки управления облаком, выполняя лабораторные работы.