python 在Docker中的Apache Airflow中设置剧作家的最佳方法是什么?

mspsb9vt  于 2022-10-30  发布在  Python
关注(0)|答案(3)|浏览(140)

bounty将在2天后过期。回答此问题可获得+100的声望奖励。Zach Bellay希望吸引更多人关注此问题:Dockerfile的一个工作示例,它可以作为Airflow的基础图像运行,并运行Playwright及其依赖项和烘焙到图像中的浏览器。

我被要求学习Docker,这样我们最终可以在Apache Airflow Docker + Kubernetes集群中设置我们的网页抓取脚本。如果我用错了这些术语,那是因为我是Docker的初学者。我不知道一大堆,但我会尽力解释细节。
Apache Airflow确实有自己的映像,我一直在使用,但是他们的explanations表明安装python包的唯一方法是通过pip install --user -r requirements.txt,我已经在我自己的Dockerfile中添加了pip install --user -r requirements.txt作为指令。问题是,要使playwright工作,它需要安装浏览器,这就是它变得棘手的地方。
简单地运行命令playwright install --with-deps将是正确的方法,但要安装这些依赖项,您需要root权限,而我没有...
playwright install --with-deps失败:

将所有内容安装为root也不起作用(使项目WAY更复杂,如果不是不可能的话)。最重要的是,运行命令提示您输入root密码,而这个密码似乎根本不可用。
这是我已经放弃的一点,但我想也许最好使用playwright自己的映像,然后手动构建apache airflow
哪种方式最好?
提前感谢!

klr1opcd

klr1opcd1#

最好的方法是使用playwright docker映像作为基础映像,这样就不需要安装它的依赖项了。https://playwright.dev/docs/docker

uz75evzq

uz75evzq2#

事实证明,包括苹果M1芯片在内的ARM 64不支持剧作家。
https://github.com/microsoft/playwright/issues/18284
在本文发表之时,这个问题的解决方案似乎是使用AMD 64/x86架构芯片,而不是ARM芯片。下面的Dockerfile可以在x86上工作,但不能在ARM上工作,而且虚拟化架构似乎也不起作用。

FROM apache/airflow:2.4.2

USER root
RUN apt update 
RUN python3 -m pip install playwright
RUN python3 -m playwright install --with-deps
USER airflow
iyfjxgzm

iyfjxgzm3#

在Docker中的Apache Airflow中设置剧作家的最佳方法是使用自定义Docker映像来安装剧作家及其依赖项,然后使用PythonOperator或BashOperator来运行剧作家脚本。

说明

Playwright是一个Python库,允许您自动执行Web浏览器操作,如导航到URL、填写表单、单击按钮、截图等。它支持多种浏览器,如Chromium、Firefox和WebKit。
Apache Airflow是一个允许您编排和调度工作流(如数据管道、ETL作业、机器学习任务等)的平台。它具有一个Web界面,可让您监控和管理工作流,以及一组丰富的运算符,可让您执行不同类型的任务。
Docker是一个工具,允许您创建和运行包含应用程序及其依赖项的隔离容器。它使您可以更轻松地在不同环境(如开发、测试和生产环境)中部署和运行应用程序。
要在Docker中使用Apache Airflow中的剧作家,您需要执行以下步骤:
1.创建一个自定义Docker映像,用于安装playwright及其依赖项,如Node.js、Python和浏览器二进制文件。您可以使用正式的playwright映像作为基础映像,也可以从头开始创建自己的映像。您还需要安装Apache Airflow包和工作流所需的任何其他包。
1.创建一个定义自定义图像的Dockerfile。例如,您可以使用类似如下的内容:


# Use the official playwright image as a base image

FROM mcr.microsoft.com/playwright

# Install Apache Airflow and other packages

RUN pip install apache-airflow

# Copy your Airflow configuration file

COPY airflow.cfg /root/airflow/airflow.cfg

# Copy your DAGs and scripts

COPY dags /root/airflow/dags
COPY scripts /root/airflow/scripts

1.使用docker build命令构建您的自定义映像。例如,您可以使用如下命令:

docker build -t my-playwright-airflow-image .

1.使用docker run命令运行您的自定义映像。例如,您可以使用类似如下的命令:

docker run -d -p 8080:8080 --name my-playwright-airflow-container my-playwright-airflow-image airflow webserver

这将在主机的端口8080上启动Airflow Web服务器。您可以通过访问http://localhost:8080来访问Web界面。
1.要运行Airflow调度程序,您可以使用另一个docker run命令。例如,您可以使用如下命令:

docker run -d --name my-playwright-airflow-scheduler my-playwright-airflow-image airflow scheduler

这将启动Airflow计划程序,该程序将根据您的计划触发您的工作流程。
1.要运行剧作家脚本,您可以在DAG中使用PythonOperator或BashOperator。PythonOperator允许您将Python函数作为任务执行,BashOperator允许您将bash命令作为任务执行。例如,您可以使用类似以下的命令:

from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.bash import BashOperator
from datetime import datetime

# Define a Python function that runs a playwright script

def run_playwright_script():
    import playwright.sync_api as p
    with p.sync_playwright() as pw:
        browser = pw.chromium.launch()
        page = browser.new_page()
        page.goto("https://example.com")
        page.screenshot(path="example.png")
        browser.close()

# Define a DAG that runs the playwright script every day

dag = DAG(
    dag_id="playwright_dag",
    start_date=datetime(2021, 1, 1),
    schedule_interval="@daily",
)

# Define a task that runs the playwright script using the PythonOperator

playwright_task = PythonOperator(
    task_id="playwright_task",
    python_callable=run_playwright_script,
    dag=dag,
)

# Alternatively, you can define a task that runs the playwright script using the BashOperator

# You need to specify the path to the script and the browser binary

playwright_task = BashOperator(
    task_id="playwright_task",
    bash_command="node /root/airflow/scripts/playwright_script.js --browser=chromium",
    dag=dag,
)

相关问题