如何运行保存在Dockerfile单独文件夹中的python文件?

如何运行保存在Dockerfile单独文件夹中的python文件?,python,docker,Python,Docker,我有一个dockerfile,如下所示: FROM python:3.7-slim-stretch ENV PIP pip RUN \ $PIP install --upgrade pip && \ $PIP install scikit-learn && \ $PIP install scikit-image && \ $PIP install rasterio && \ $PIP

我有一个dockerfile,如下所示:

FROM python:3.7-slim-stretch

ENV PIP pip

RUN \
    $PIP install --upgrade pip && \
    $PIP install scikit-learn && \
    $PIP install scikit-image && \
    $PIP install rasterio && \  
    $PIP install geopandas && \ 
    $PIP install matplotlib

COPY sentools sentools
COPY data data
COPY vegetation.py .


现在,在我的项目中,我有两个python文件:植被和森林。我把它们分别放在不同的文件夹里。如何为这两个python文件创建单独的docker映像并分别执行容器?

如果基本代码相同,并且只有容器应该使用不同的python脚本运行,那么我建议使用单个docker,您就不用担心管理两个docker映像了

FROM python:3.7-alpine3.9 
ARG APP="default_script.py"
ENV APP=$APP
COPY $APP /$APP
CMD ["sh", "-c", "python /$APP"]
将vegetation.py设置为默认值,当容器启动而未传递ENV时,它将运行vegetation.py,如果ENV文件在运行时运行覆盖,则将运行指定的文件

FROM python:3.7-alpine3.9 
ENV FILE_TO_RUN="/vegetation.py"
COPY vegetation.py /vegetation.py
CMD ["sh", "-c", "python $FILE_TO_RUN"]
现在,如果要运行forest.py,只需将路径文件传递给ENV即可

docker run -it -e FILE_TO_RUN="/forest.py" --rm my_image

更新:

您可以在docker映像中使用args+env进行管理

FROM python:3.7-alpine3.9 
ARG APP="default_script.py"
ENV APP=$APP
COPY $APP /$APP
CMD ["sh", "-c", "python /$APP"]
现在使用ARGs构建

docker build --build-arg APP="vegetation.py" -t app_vegetation .

现在可以开始跑步了

docker run --rm -it app_forest
抄袭

FROM python:3.7-alpine3.9 
# assign some default script name to args
ARG APP="default_script.py"
ENV APP=$APP
COPY vegetation.py /vegetation.py
COPY forest.py /forest.py
CMD ["sh", "-c", "python /$APP"]

如果基础代码相同,并且只有容器应该使用不同的Python脚本运行,那么我建议使用单个Docker,您就不用担心管理两个Docker映像了

FROM python:3.7-alpine3.9 
ARG APP="default_script.py"
ENV APP=$APP
COPY $APP /$APP
CMD ["sh", "-c", "python /$APP"]
将vegetation.py设置为默认值,当容器启动而未传递ENV时,它将运行vegetation.py,如果ENV文件在运行时运行覆盖,则将运行指定的文件

FROM python:3.7-alpine3.9 
ENV FILE_TO_RUN="/vegetation.py"
COPY vegetation.py /vegetation.py
CMD ["sh", "-c", "python $FILE_TO_RUN"]
现在,如果要运行forest.py,只需将路径文件传递给ENV即可

docker run -it -e FILE_TO_RUN="/forest.py" --rm my_image

更新:

您可以在docker映像中使用args+env进行管理

FROM python:3.7-alpine3.9 
ARG APP="default_script.py"
ENV APP=$APP
COPY $APP /$APP
CMD ["sh", "-c", "python /$APP"]
现在使用ARGs构建

docker build --build-arg APP="vegetation.py" -t app_vegetation .

现在可以开始跑步了

docker run --rm -it app_forest
抄袭

FROM python:3.7-alpine3.9 
# assign some default script name to args
ARG APP="default_script.py"
ENV APP=$APP
COPY vegetation.py /vegetation.py
COPY forest.py /forest.py
CMD ["sh", "-c", "python /$APP"]

如果坚持创建单独的图像,则始终可以使用该命令

然后建立这样的形象:

docker build --buid-arg file_to_copy=vegetation.py .
还是那样

docker build --buid-arg file_to_copy=forest.py .

如果坚持创建单独的图像,则始终可以使用该命令

然后建立这样的形象:

docker build --buid-arg file_to_copy=vegetation.py .
还是那样

docker build --buid-arg file_to_copy=forest.py .

启动Docker容器时,可以在Docker run命令末尾指定要运行的命令。因此,您可以构建一个包含两个脚本的图像,并在启动容器时选择运行哪个脚本

这些脚本通常应该是可执行的:它们需要设置可执行权限位,并且需要以类似

!/usr/bin/env蟒蛇3 您应该能够在Docker运行之外的本地运行

. 一些虚拟环境/bin/activate //植被类型 一旦完成此操作,您就可以将内容复制到Docker图像中

来自python:3.7-slim-stretch WORKDIR/app 复制requirements.txt。 运行pip安装-r requirements.txt 复制sentools sentools 复制数据 复制vegetory.py forest.py。 CMD[./vegetory.py] 然后,您可以使用任一脚本构建并运行此映像

docker build-t树。 docker run-rm trees./vegetory.py docker run-rm trees./forest.py 如果您确实希望这是两个单独的图像,那么可以创建两个单独的DockerFile,它们仅在最终副本和CMD行中有所不同,并使用docker build-f选项选择要使用的一个

$ tail -2 Dockerfile.vegetation
COPY vegetation.py ./
CMD ["./vegetation.py"]
$ docker build -t vegetation -f Dockerfile.vegetation .
$ docker run --rm vegetation

启动Docker容器时,可以在Docker run命令末尾指定要运行的命令。因此,您可以构建一个包含两个脚本的图像,并在启动容器时选择运行哪个脚本

这些脚本通常应该是可执行的:它们需要设置可执行权限位,并且需要以类似

!/usr/bin/env蟒蛇3 您应该能够在Docker运行之外的本地运行

. 一些虚拟环境/bin/activate //植被类型 一旦完成此操作,您就可以将内容复制到Docker图像中

来自python:3.7-slim-stretch WORKDIR/app 复制requirements.txt。 运行pip安装-r requirements.txt 复制sentools sentools 复制数据 复制vegetory.py forest.py。 CMD[./vegetory.py] 然后,您可以使用任一脚本构建并运行此映像

docker build-t树。 docker run-rm trees./vegetory.py docker run-rm trees./forest.py 如果您确实希望这是两个单独的图像,那么可以创建两个单独的DockerFile,它们仅在最终副本和CMD行中有所不同,并使用docker build-f选项选择要使用的一个

$ tail -2 Dockerfile.vegetation
COPY vegetation.py ./
CMD ["./vegetation.py"]
$ docker build -t vegetation -f Dockerfile.vegetation .
$ docker run --rm vegetation

不幸的是,我不能在这个项目下使用环境变量,但这是一个很好的解决方案,对我来说很有效,但是如果我必须为ENV使用默认的python脚本,如果在构建时没有定义该脚本,该怎么办呢。我该怎么做?除此之外,还添加了所有这些工作。您可以将默认脚本名称分配给args。``将一些默认脚本名称分配给args ARG APP=default_script.py``因此,如果您在生成时错过了,默认的_script.py将被拾取此抛出错误ARG需要正好1个参数不幸的是,我无法在此项目下使用环境变量,但这是一个很好的解决方案,对我来说很有效,但是如果我必须为ENV使用默认的python脚本,如果在构建时未定义该脚本,该怎么办。我该怎么做
在除此之外,还添加了所有这些工作。您可以为args指定默认脚本名称。``为args指定一些默认脚本名称ARG APP=default\u script.py``因此,如果您在生成时错过了,将选择default\u script.py。此抛出错误ARG需要正好1个参数。它生成了映像,但没有执行我的脚本。表示在路径中找不到可执行文件。我如何执行kit?它生成映像,但不执行我的脚本。表示在路径中找不到可执行文件。如何执行kit?