긴 초기 명령이 포함된 컨테이너의 Docker 패턴

긴 초기 명령이 포함된 컨테이너의 Docker 패턴

저는 많은 로컬 및 오픈 소스 코드를 호스트 시스템에 배포하여 빌드하고 실행할 수 있는 도커 컨테이너로 패키징하려고 합니다. 최종 컨테이너의 의도는 명령줄 스타일로 실행되어 결과를 출력하는 것입니다. ( docker run cmdcontainer args). 내가 가진 문제는 배포된 소스가 한 번 실행될 특정 호스트에서 대상으로 지정되고 컴파일되어야 하며 완료하는 데 몇 시간이 걸린다는 것입니다. 그러나 일단 컴파일되면 명령은 매우 빠르게 실행됩니다.

따라서 이러한 종류의 워크플로에 대해 알려진 Docker 패턴이 있는지 궁금합니다.

소스 파일과 함께 Docker 컨테이너 배포 -> 컨테이너를 실행하여 컴파일된 바이너리가 포함된 새 컨테이너 생성 -> 후속 실행으로 컴파일된 컨테이너 실행

이는 기본적으로 기존 컨테이너 위에 새 컨테이너를 겹겹이 쌓는 것이기 때문에 이것이 가능할 것 같지만 저는 도커 초보자입니다.

답변1

모든 호스트가 고유하기 때문에 제가 생각해 낼 수 있는 최선의 솔루션은 지속성을 위해 볼륨을 사용하는 것입니다. 진입점에는 다음 워크플로가 필요합니다.

  1. 볼륨에서 컴파일된 코드의 버전을 확인하세요.
  2. 버전이 일치하지 않으면 볼륨 내용을 삭제하세요.
  3. 버전이 설정되지 않았거나 일치하지 않으면 컴파일을 실행하십시오.
  4. 해당 볼륨에 새 버전 번호를 씁니다.
  5. 볼륨의 컴파일된 버전에서 앱을 실행하세요.

이를 위해서는 이미지 빌드에 git 해시와 같은 버전 번호가 포함되어야 합니다. 빌드 인수를 사용하여 이 작업을 수행할 수 있습니다.

docker build --build-arg GIT_REV=$(git rev-parse --short HEAD) ...

그러면 Dockerfile에는 다음과 같은 내용이 포함됩니다.

ARG GIT_REV
ENV GIT_REV=${GIT_REV}

볼륨 없이 실행하는 모든 사용자는 여전히 모든 실행이 컴파일을 수행하는 것을 볼 수 있습니다.

관련 정보