development

Docker가 변경된 경우에만 pip requirements.txt를 실행하는 방법은 무엇입니까?

big-blog 2020. 12. 28. 22:27
반응형

Docker가 변경된 경우에만 pip requirements.txt를 실행하는 방법은 무엇입니까?


Dockerfile에는 다음을 설치하는 계층이 있습니다 requirements.txt.

FROM python:2.7
RUN pip install -r requirements.txt

도커 이미지를 빌드하면 이 파일의 변경 사항에 관계없이 전체 프로세스가 실행 됩니다.

pip install -r requirements.txt파일이 변경된 경우 에만 Docker가 실행되도록하려면 어떻게해야 합니까?

Removing intermediate container f98c845d0f05
Step 3 : RUN pip install -r requirements.txt
 ---> Running in 8ceb63abaef6
Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30))
  Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip
Collecting Django==1.8.7 (from -r requirements.txt (line 1))

빌드 프로세스의 어느 시점에서 COPY또는 ADD다음을 사용 하여 전체 애플리케이션을 Docker 이미지에 복사한다고 가정합니다 .

COPY . /opt/app
WORKDIR /opt/app
RUN pip install -r requirements.txt

문제는 전체 애플리케이션을 이미지에 복사 할 때마다 Docker 빌드 캐시를 무효화한다는 것입니다. 이것은 또한 모든 후속 빌드 단계에 대한 캐시를 무효화합니다.

이를 방지하려면 전체 애플리케이션을 이미지에 추가하기 전에 별도의 빌드 단계에서 파일 requirements.txt 복사하는 것이 좋습니다 .

COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
COPY . /opt/app
# continue as before...

요구 사항 파일 자체는 거의 변경되지 않으므로 애플리케이션 코드를 이미지에 추가 할 때까지 캐시 된 레이어를 사용할 수 있습니다.


이것은 Docker의 자체 " Dockerfile 작성 모범 사례 "에서 직접 언급됩니다 .

컨텍스트에서 다른 파일을 사용하는 여러 Dockerfile 단계가있는 경우 한 번에 모두 복사하지 말고 개별적으로 복사하십시오. 이렇게하면 특별히 필요한 파일이 변경된 경우에만 각 단계의 빌드 캐시가 무효화됩니다 (단계가 다시 실행되도록 함).

예를 들면 :

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

COPY를 넣는 경우보다 RUN 단계에 대한 캐시 무효화가 더 적습니다. / tmp /.

참조 URL : https://stackoverflow.com/questions/34398632/docker-how-to-run-pip-requirements-txt-only-if-there-was-a-change

반응형