我有一个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版本(其余所有文件都一样),但是我想知道是否还有更优雅的方法。
谢谢
答案 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"]