Flask – это веб-каркас Python, который используется для разработки веб-приложений. В этом посте мы постараемся развернуть веб-приложение на нашей машине, используя Docker Container.
Контейнерное содержание приложения – это упаковка приложения и его требований, так что его можно использовать для развертывания в любой машине на ходу. Мы создадим Docker Image Web-App, используя Dockerfile, а затем запускаем контейнер Docker для доступа к веб-приложению в нашем браузере.
Начиная
Мы будем использовать приложение Basic Flask, созданное Минди Макадамс Отказ Github Repo URL: https://github.com/macloo/basic-flask-app.
Клонировать репо в машине https://github.com/macloo/basic-flask-app Использование команды ниже:
git clone https://github.com/macloo/basic-flask-app
Я надеюсь, что Docker уже установлен в вашей системе, но если он не установлен, то, последуйте шаги, указанные в Установите Docker Engine
Теперь все настроено. Мы начнем писать Dockerfile для приложения колбы.
Контейнерное приложение для колбы
Теперь мы создадим DockerFile для приложения для колбы, которое будет использоваться для создания изображения приложения.
Следуйте инструкциям ниже, чтобы создать DockerFile:
1) клонировать github repo, если не сделано. 2) Измените каталог на Basic-Flask-App/и создать файл под названием Dockerfile.
cd basic-flask-app/ touch Dockerfile
3) Используйте свой любимый редактор, редактировать Dockerfile
и вставьте следующее:
ARG APP_IMAGE=python:3.6.1-alpine FROM $APP_IMAGE AS base FROM base as builder RUN mkdir /install WORKDIR /install COPY requirements.txt /requirements.txt RUN pip install --install-option="--prefix=/install" -r /requirements.txt FROM base ENV FLASK_APP routes.py WORKDIR /project COPY --from=builder /install /usr/local ADD . /project ENTRYPOINT ["python", "-m", "flask", "run", "--host=0.0.0.0"]
Разбие докера
Давайте посмотрим на каждую строку Dockerfile.
ARG APP_IMAGE=python:3.6.1-alpine
Arg
Также известны как переменные время в области сборки I.e. Они могут быть установлены во время сборки изображения с --build-arg.
И вы не можете получить доступ к ним, как только изображение будет построено. Здесь мы берем переменную App_image
дать базовое имя изображения. Значение по умолчанию: Python: 3.6.1-Alpine
FROM $APP_IMAGE AS base
Мы используем концепцию многоступенчатых сборки для оптимизации размера изображения докера. Подробнее о многоступенчатых сборках в здесь Отказ Здесь От
Инициализирует сцену сборки и устанавливает базовое изображение.
FROM base as builder
Здесь мы устанавливаем имя псевдонима строитель
для базового изображения. На этом изображении мы только устанавливаем пакеты зависимостей.
RUN mkdir /install
Беги
Используется для запуска определенной команды, и она создает записью для записи контейнера. Здесь мы запускаем команду для создания каталога, называемого Установить
Отказ Таким образом, имя строитель
:П
WORKDIR /install
Workdir
Настройка рабочего каталога контейнера Docker в любой момент времени. Любая команда прогона, CMD, Add, Copy или Entrypoint будет выполнена в указанном рабочем каталоге. Здесь мы делаем установить
каталог как рабочий каталог.
COPY requirements.txt /requirements.txt
Скопировать
Поскольку имя предлагается для копирования файла из текущего каталога вашего клиента Docker. Здесь мы копируем файл требования
RUN pip install --install-option="--prefix=/install" -r /requirements.txt
Здесь мы используем Пип
Чтобы установить все пакеты, необходимые для создания приложения Flask. Пакеты упоминаются в требования .txt
файл.
FROM base
Опять же, теперь после установки необходимых пакетов мы сейчас принимаем одно и то же изображение (используемое выше) в качестве базового изображения.
ENV FLASK_APP routes.py
Чтобы запустить приложение для колбы, либо нам нужно использовать колбу команда или питона -М Переключиться с колбой. Но до этого нам нужно экспортировать переменную под названием Flask_app Чтобы указать, как загрузить приложение.
Примечание: Это начнет разработчик веб-сервера. Но для развертывания производства вам нужно использовать готовый веб-сервер, как uwsgi.
WORKDIR /project
Мы устанавливаем проект
каталог как рабочий каталог.
COPY --from=builder /install /usr/local
Мы копируем все установленные удаленные двоичные пакеты, установленные на более позднем базовом изображении на путь /usr/local
в текущем базовом изображении.
ADD . /project
Добавить
Команда также используется для копирования файлов/каталогов, а также он также, копирует и извлечь сжатый файл автоматически. Здесь мы копируем файлы/каталоги из текущего локального каталога в контейнер Проект
каталог.
ENTRYPOINT ["python", "-m", "flask", "run", "--host=0.0.0.0"]
Выходная точка
Чтобы идентифицировать, какой исполняемый файл должен выполняться, когда контейнер запускается с вашего изображения. Здесь мы запустим приложение Flask, используя Python’s -М
и --host = 0,0.0.0
сделает сервер публично доступен.
Запуск контейнера Docker
У нас есть DockerFile, созданный в разделе выше. Теперь мы будем использовать DockerFile, чтобы создать изображение приложения Flask, а затем запустить контейнер приложения Flask.
Выполните следующие шаги для запуска контейнера:
1) Создание образа докера, используя Docker Build
команда.
docker build -t basic-flask:latest --build-arg APP_IMAGE=python:3.9.5-alpine -f Dockerfile .
Вышеуказанная команда построит изображение с тегом Basic-Flask: последние
Отказ Мы дали --build-arg
Возможность упомянуть имя базового изображения для использования в сборке изображения.
Примечание: Если мы используем опцию --build-arg
в Docker Build
Команда, она перезапишет значение по умолчанию переменной, используемую в DockerFile. Но мы бежим Docker Build
Команда без использования опции --build-arg.
Это примет значение по умолчанию.
2) После успешной работы команды запустите команду ниже:
docker images
Эта команда будет перечислять все изображения Docker, и вы также можете увидеть изображение Basic-Flask: последние
в списке.
3) Теперь запустите команду ниже, чтобы запустить контейнер из сборки изображения на шаге 2.
docker container run -p 5000:5000 -dit --name flaskApp basic-flask:latest
Эта команда запускает приложение в порту 5000
Отказ Используемые различные опции:
-П
: Опубликуйте порт контейнера к порту хоста.-d
: Запустите контейнер на заднем плане.-Я
: Запустите контейнер в интерактивном режиме.-t
: выделить псевдо-тты.--name
: Имя контейнера
4) Проверьте состояние контейнера Docker, используя команду:
docker container ps
Вы можете увидеть, что ваш контейнер в Бег
Режим с несколькими другими деталями.
Попробуйте получить доступ к приложению Flask из вашего браузера. Посетите URL http://localhost: 5000/
и проверить вывод:
Попробуйте вышеуказанный пример, и, пожалуйста, дайте мне знать в комментариях, если у вас есть какие-либо сомнения или иметь лучшую форму Dockerfile
построить приложение Flask.
Оригинал: “https://dev.to/souravatta/writing-a-dockerfile-for-flask-app-2g1n”