使用Jenkins和Docker运行Python脚本

使用Jenkins和Docker运行Python脚本,python,docker,jenkins,jenkins-pipeline,Python,Docker,Jenkins,Jenkins Pipeline,我想在Jenkins(pipeline)作业的各个阶段运行Python脚本,在国外有广泛的代理。我希望所有这些都使用相同的Python环境,因此我正在考虑为此使用Docker 我正在考虑使用Docker构建一个包含Python环境(包括已安装的软件包等)的映像,然后允许基于参数输入的外部Python脚本: docker运行my_image my_python_file.py 我现在的问题是,基础设施应该如何建设?我看到PythonDocker发行版是688MB,将此映像传输到所有步骤肯定会有开销

我想在Jenkins(pipeline)作业的各个阶段运行Python脚本,在国外有广泛的代理。我希望所有这些都使用相同的Python环境,因此我正在考虑为此使用Docker

我正在考虑使用Docker构建一个包含Python环境(包括已安装的软件包等)的映像,然后允许基于参数输入的外部Python脚本:

docker运行my_image my_python_file.py

我现在的问题是,基础设施应该如何建设?我看到PythonDocker发行版是688MB,将此映像传输到所有步骤肯定会有开销?然而,他们都在同一个网络上,所以这也许不是什么大问题

更新。因此,我的Dockerfile如下所示:

FROM python:3.6-slim-jessie

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

CMD ["python3"]
然后我使用

>docker build./-t我的应用程序

它成功地构建了映像并安装了我的需求。然后我想使用

>docker run-编辑我的应用程序

然后我使用


>docker exec-d{DAEMON_ID}my script.py

将docker容器作为守护进程运行,每次需要运行Python脚本时,调用
docker exec

docker exec -d <your-container> <your-python-file.py>
docker exec-d

将Docker容器作为守护进程运行,每次需要运行Python脚本时,调用
Docker exec

docker exec -d <your-container> <your-python-file.py>
docker exec-d

使用Docker代理进行构建是实现分布式和可复制构建的有效方法

我看到PythonDocker发行版是688MB,将此映像传输到所有步骤肯定会有开销

你应该考虑使用更小的码头工人图像。python有alpine和slim docker图像。你应该首先考虑使用这些。alpine python图像的大小为
89.2MB

此外,大多数图像层将由Docker缓存,因此您将提取一些尺寸明显较小的层。

使用Docker代理进行构建是获得分布式和可复制构建的有效方法

我看到PythonDocker发行版是688MB,将此映像传输到所有步骤肯定会有开销

你应该考虑使用更小的码头工人图像。python有alpine和slim docker图像。你应该首先考虑使用这些。alpine python图像的大小为
89.2MB

此外,Docker将缓存大多数图像层,因此您将提取一些尺寸明显较小的层。

您在没有输入的情况下运行命令
python3
,因此它退出。试着告诉Docker这个命令是交互式的,这样它就可以使stdin保持打开状态:
Docker run-dit my app
。然后执行时,我收到以下错误:
来自守护程序的错误响应:OCI runtime exec failed:exec failed:container\u linux.go:348:启动容器进程导致“exec:\“my script.py\”:在$PATH中找不到可执行文件:
my script.py
。发生这种情况是因为
my script.py
在容器外部。通过装入一个卷(以便主机和容器可以共享文件)启动容器,并将
my script.py
放在该卷中。好的,现在我让它开始工作了,但我不确定这是最佳的方式。运行守护程序:
docker Run-v$(pwd)/:/src-dit my app
执行脚本:
docker exec{ID}python src/my_script.py
您在没有输入的情况下运行命令
python3
,因此它退出。试着告诉Docker这个命令是交互式的,这样它就可以使stdin保持打开状态:
Docker run-dit my app
。然后执行时,我收到以下错误:
来自守护程序的错误响应:OCI runtime exec failed:exec failed:container\u linux.go:348:启动容器进程导致“exec:\“my script.py\”:在$PATH中找不到可执行文件:
my script.py
。发生这种情况是因为
my script.py
在容器外部。通过装入一个卷(以便主机和容器可以共享文件)启动容器,并将
my script.py
放在该卷中。好的,现在我让它开始工作了,但我不确定这是最佳的方式。运行守护程序:
docker Run-v$(pwd)/:/src-dit my app
执行脚本:
docker exec{ID}python src/my_script.py