我在dockerfile中使用Python_onbuild作为基本映像,如下所示。但是,每当我在源文件中进行更改时,它都会通过使缓存无效来重复执行命令。
FROM python:2.7.13-onbuild
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
RUN echo "Test Cache"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install --assume-yes apt-utils
RUN apt-get update && apt-get install -y curl
RUN apt-get update && apt-get install -y unzip
RUN curl -o - url
构建日志:
Sending build context to Docker daemon 239.1kB
Step 1/6 : FROM python:2.7.13-onbuild
# Executing 3 build triggers...
Step 1/1 : COPY requirements.txt /usr/src/app/
---> Using cache
Step 1/1 : RUN pip install --no-cache-dir -r requirements.txt
---> Using cache
Step 1/1 : COPY . /usr/src/app
---> 13e927036649
复制(Step 1/1 : COPY . /usr/src/app)
的第3步是在我对工作目录中的任何文件进行更改时重复执行其余命令。我认为这是来自基本图像的ONBUILD命令。如果这是真的那么在这种情况下什么是替代基础图像?我应该使用Python:?
我想要更多地控制需求安装以及复制过程,因为我必须下载一个3.6GB的文件,我不想在每次构建docker时重复这个文件。
注意:此特定基本图像是由其他人选择的,我正在构建一些现有工作。
答案 0 :(得分:1)
您Dockerfile中描述了您正在使用的基本影像
如您所见,它基于python:2.7
。因此,如果您不需要ONBUILD
说明,只需直接使用此图片或符合您需求的图片:您可以在the python image on Docker Hub上找到一个列表,其中包含指向所有相应Dockerfiles的链接。
答案 1 :(得分:0)
您可以使用基础ubuntu映像并安装python,也可以使用安装了python的其他映像。 您需要在需求安装部件之后移动源复制部件,以便在更改代码时不必进行安装。这就是我的docker文件的样子。
############################################################
# Dockerfile to run a Django-based web application
# Based on an Ubuntu Image
############################################################
# Set the base image to use to Ubuntu
FROM ubuntu:14.04
ENV DOCKYARD_SRC=app
ENV DOCKYARD_SRVHOME=/app
# Update the default application repository sources list
RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y python-dev
RUN apt-get install -y python-pip
RUN apt-get install -y build-essential
RUN apt-get -y install wget
RUN apt-get -y install php5 libapache2-mod-php5 php5-mcrypt
RUN apt-get -y install curl libcurl3 libcurl3-dev php5-curl
RUN pip install uwsgi
RUN mkdir $DOCKYARD_SRC
COPY ./requirements.txt $DOCKYARD_SRVHOME/requirements.txt
RUN pip install -r $DOCKYARD_SRVHOME/requirements.txt
COPY . $DOCKYARD_SRVHOME
EXPOSE 8001 8000
WORKDIR $DOCKYARD_SRVHOME
RUN chmod +x entrypoint.sh
CMD ["./entrypoint.sh"]