【问题标题】:DockerFile for a Python script with Firefox-based Selenium web driver, Flask & BS4 dependencies用于 Python 脚本的 DockerFile,具有基于 Firefox 的 Selenium Web 驱动程序、Flask 和 BS4 依赖项
【发布时间】:2021-04-11 01:14:05
【问题描述】:

python 超级新手,之前从未使用过 docker。我想在 Google Cloud Run 上托管我的 python 脚本,但需要打包到 Docker 容器中以提交给 google。

这个 DockerFile 中究竟需要做什么才能上传到 google?

当前信息:

  • Python:v3.9.1
  • 烧瓶:v1.1.2
  • Selenium Web 驱动程序:v3.141.0
  • Firefox Geckodriver:v0.28.0
  • Beautifulsoup4:v4.9.3
  • 熊猫:v1.2.0

如果需要有关脚本的更多信息,请告诉我。

我从here 中找到了以下sn-ps 代码作为起点。我只是不知道如何调整以适应我的规格,也不知道“gunicorn”的用途。

# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.7

# Install manually all the missing libraries
RUN apt-get update
RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libcairo2 libcups2 libfontconfig1 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libxss1 fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils

# Install Chrome
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install

# Install Python dependencies.
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

# Copy local code to the container image.
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . .

# Run the web service on container startup. Here we use the gunicorn
# webserver, with one worker process and 8 threads.
# For environments with multiple CPU cores, increase the number of workers
# to be equal to the cores available.
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app

# requirements.txt

Flask==1.0.2
gunicorn==19.9.0
selenium==3.141.0
chromedriver-binary==77.0.3865.40.0

【问题讨论】:

  • 你如何运行你的烧瓶应用程序? docker 文件对我来说似乎还不错,您只需传递所有需要特定版本控制的要求。在文件的末尾,您将添加运行烧瓶应用程序所需的命令,在此 docker 文件中,gunicorn 用于提供服务,如果您有 main.py,您还需要将 export FLASK_APP=main 添加到 dockerfile 中其中包含app.run()
  • 感谢您的回复。我什至还没有将 main.py 设置为包含 Flask,因为我仍在学习如何......只知道我需要它。但它将包含app.run(),所以我将添加该命令。所以我理解正确,在这个例子中,gunicorn 被用作 Flask 的替代品?
  • 我现在读的越多,我就越不确定我是否应该使用 Flask 并且应该使用 Nginx 或 Gunicorn。
  • Flask 应用程序可以使用许多工具,例如 flask run 本身不推荐用于生产用途,我们有 gunicorn、waitress、wsgi 等,它们都服务于 Flask 应用程序,你需要告诉他们你在哪个文件中启动了你的烧瓶应用程序。

标签: python docker selenium dockerfile google-cloud-run


【解决方案1】:

Gunicorn 是一个用于运行你的 Python 应用实例的应用服务器,它是一个用于 WSGI 应用的纯 Python HTTP 服务器。它允许您通过在单个 dyno 中运行多个 Python 进程来同时运行任何 Python 应用程序。

请查看以下教程,其中详细解释了gunicorn

关于 Cloud Run,要部署到 Cloud Run,请按照后续步骤或Cloud Run Official Documentation

1) 创建文件夹

2) 在该文件夹中,创建一个名为 main.py 的文件并编写您的 Flask 代码

简单的 Flask 代码示例

import os

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
    name = os.environ.get("NAME", "World")
    return "Hello {}!".format(name)


if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

3) 现在您的应用已完成,可以进行容器化并上传到 Container Registry

3.1) 因此,要将您的应用容器化,您需要一个与源文件 (main.py) 位于同一目录中的 Dockerfile

3.2) 现在使用 Cloud Build 构建您的容器镜像,从包含 Dockerfile 的目录中运行以下命令:

gcloud builds submit --tag gcr.io/PROJECT-ID/FOLDER_NAME

其中 PROJECT-ID 是您的 GCP 项目 ID。你可以通过运行gcloud config get-value project得到它

4) 最后,您可以通过执行以下命令来部署到 Cloud Run:

gcloud run deploy --image gcr.io/PROJECT-ID/FOLDER_NAME --platform managed

您还可以查看 Google Cloud Run Official GitHub Repository 以获取 Cloud Run Hello World 示例。

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2014-02-02
    • 2017-09-09
    • 2011-12-30
    相关资源
    最近更新 更多