2017-07-31 71 views
0

我使用Python_onbuild作爲dockerfile中的基礎鏡像,如下所示。但是,無論何時在源文件中進行更改,都會導致我的命令重複失效。哪個Python變體在dockerfiles中用作基礎圖像?

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)正在重複命令的其餘部分,每當我做了工作目錄中的任何文件發生變化的這第三步。我認爲這是來自基本映像的ONBUILD命令。如果那是真的,那麼這種情況下的替代基礎圖像是什麼?我應該使用Python嗎?

我想要更多地控制需求安裝以及複製過程,因爲我必須下載3.6GB的文件,我不希望每次構建docker時都重複該文件。

注意:這個特定的基礎圖像是由其他人選擇的,我正在建立一些現有的工作之上。

+0

您可以將源複製部分移動到dockerfile的末尾。以及之前的安裝過程,以便您在每次更改源代碼時都沒有安裝。 – viveksyngh

+0

@viveksyngh我無法更改複製部分,因爲它由基礎圖像處理。您可以看到它在我的dockerfile中沒有顯式複製命令。 – utengr

回答

1

您使用的基本圖像在此Dockerfile中描述。
正如您所見,它基於python:2.7。因此,如果您不需要ONBUILD說明,請直接使用此圖像或可以滿足您需求的圖像:您可以在the python image on Docker Hub上找到一個鏈接,列出所有對應的Docker文件的鏈接。

+0

這就是我需要的。我只注意到onbuild不推薦用於生產用途「ONBUILD鏡像變體已被棄用,並且不鼓勵它們的使用。有關更多詳細信息,請參閱docker-library/official-images#2076。」 – utengr

0

您可以使用base 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"]