我有一个 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 版本(其余部分都相同),但想知道是否有更优雅的方法来做到这一点。
谢谢
您可以尝试更新上面提到的脚本,例如
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"]
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 \
.
您可以为其使用构建参数。
您的 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=...)