使用相同的Dockerfile构建具有不同python版本的映像

时间:2019-05-31 22:16:46

标签: makefile dockerfile

我有一个python脚本,希望在运行python 2.7和python 3.6的2个不同容器上运行。

我想使用相同的docker文件来构建2个不同的映像,不同之处在于python版本(即,一次是FROM python:3.6,另一次是FROM python:2.7,并通过makefile来完成

制作文件

.PHONY = all clean build run

all: build run

# DOCKER TASKS
# Build the container
build: ## Build the container for tests
        docker build -t myscript:python2.7 .
        docker build -t myscript:python3.6 .
run: ## Run container
        docker run myscript:python2.7
        docker run myscript:python3.6

我有一个用于构建映像的Dockerfile: Dockerfile

FROM python:3.6

WORKDIR /usr/local/bin
RUN pip install pytest
COPY myscript.py test_regex_script.py ./

CMD ["pytest", "test_regex_script.py"]

由于它是同一个Docker文件,所以很棘手,我想创建两个不同的Dockerfile,每个文件都使用不同的python版本(其余所有文件都一样),但是我想知道是否还有更优雅的方法。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以为其使用build参数。

您的Dockerfile应该如下所示:

ARG VERSION=3.6

FROM python:3.6

WORKDIR /usr/local/bin
RUN pip install pytest
COPY myscript.py test_regex_script.py ./

CMD ["pytest", "test_regex_script.py"]

要针对3.6进行构建:

docker build -t python-app:3.6 .

要针对2.7构建:

docker build -t python-app:2.7 --build-arg VERSION=2.7 .

请注意,如果您未指定3.6版本,则默认版本为3.6(ARG VERSION = 3.6)。您也不能分配默认值,在这种情况下,您必须始终在build参数中传递值(--build-arg VERSION = ...)

答案 1 :(得分:0)

你可以尝试更新上面提到的脚本

ARG PYTHON_VERSION=python:3.8-slim-buster

来自 python:${PYTHON_VERSION}

工作目录 /usr/local/bin 运行 pip 安装 pytest 复制 myscript.py test_regex_script.py ./

CMD ["pytest", "test_regex_script.py"]