prosource

파이프 요구 사항을 실행하는 방법을 도커합니다.변경이 있는 경우에만 txt?

probook 2023. 7. 17. 21:13
반응형

파이프 요구 사항을 실행하는 방법을 도커합니다.변경이 있는 경우에만 txt?

도커 파일에 설치되는 계층이 있습니다.requirements.txt:

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

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

도커만 실행하려면 어떻게 해야 합니까?pip install -r requirements.txt파일에 변경사항이 있는 경우?

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))

빌드 프로세스의 어느 시점에서 전체 응용프로그램을 Docker 이미지에 복사하는 것으로 가정합니다.COPY또는ADD:

COPY . /opt/app
WORKDIR /opt/app
RUN pip install -r 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의 "Docker 파일 작성 모범 사례"에 직접 언급되어 있습니다.

컨텍스트와 다른 파일을 사용하는 도커 파일 단계가 여러 개 있는 경우 한 번에 모두 복사하는 것이 아니라 개별적으로 복사합니다.이렇게 하면 특정 필수 파일이 변경된 경우에만 각 단계의 빌드 캐시가 무효화됩니다(단계를 다시 실행하도록 강제함).

예:

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

따라서 실행 단계 앞에 COPY . /tmp/를 놓는 경우보다 실행 단계에 대한 캐시 무효화 횟수가 줄어듭니다.

또는 더 빠른 실행 수단으로서requirements.txt라이브러리 설치를 확인하기 위해 "yes"를 입력하지 않고 파일을 다시 쓸 수 있습니다.

COPY requirements.txt ./
RUN pip install -y -r requirements.txt
COPY ./"dir"/* .

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

반응형