使用相同的 Dockerfile 构建不同 python 版本的镜像

问题描述 投票:0回答:3

我有一个 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 版本(其余部分都相同),但想知道是否有更优雅的方法来做到这一点。

谢谢

makefile dockerfile
3个回答
0
投票

您可以尝试更新上面提到的脚本,例如

ARG PYTHON_VERSION=python:3.8-slim-buster

FROM python:${PYTHON_VERSION}

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

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

0
投票

确保

ARG
位于
Dockerfile
的最顶部。

ARG PY_VERSION=3.8
ARG NODE_VERSION=16
FROM node:$NODE_VERSION as frontend
FROM python:$PY_VERSION as backend

FROM
可以位于文件中的较低位置。

默认(

python:3.8
node:16
):

docker build \
-t my-image \
-f Dockerfile \
.

覆盖Python(使用

3.10
代替
3.8
):

docker build \
-t my-image \
-f Dockerfile \
--build-arg PY_VERSION=3.10 \
.

覆盖节点:

docker build \
-t my-image \
-f Dockerfile \
--build-arg NODE_VERSION=17 \
.

覆盖两者:

docker build \
-t my-image \
-f Dockerfile \
--build-arg PY_VERSION=3.10 \
--build-arg NODE_VERSION=17 \
.

您还可以使用 buildx /

docker buildx build
:

docker buildx build \
-t my-image \
-f Dockerfile \
--build-arg PY_VERSION=3.10 \
--build-arg NODE_VERSION=17 \
.

0
投票

您可以为其使用构建参数。

您的 Dockerfile 应如下所示:

ARG VERSION=3.6

FROM python:${VERSION}

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 是默认版本,以防您未指定版本 (ARG VERSION=3.6)。您也可以不分配默认值,在这种情况下,您必须始终在构建参数中传递一个值(--build-arg VERSION=...)

© www.soinside.com 2019 - 2024. All rights reserved.