저는 많은 로컬 및 오픈 소스 코드를 호스트 시스템에 배포하여 빌드하고 실행할 수 있는 도커 컨테이너로 패키징하려고 합니다. 최종 컨테이너의 의도는 명령줄 스타일로 실행되어 결과를 출력하는 것입니다. ( docker run cmdcontainer args
). 내가 가진 문제는 배포된 소스가 한 번 실행될 특정 호스트에서 대상으로 지정되고 컴파일되어야 하며 완료하는 데 몇 시간이 걸린다는 것입니다. 그러나 일단 컴파일되면 명령은 매우 빠르게 실행됩니다.
따라서 이러한 종류의 워크플로에 대해 알려진 Docker 패턴이 있는지 궁금합니다.
소스 파일과 함께 Docker 컨테이너 배포 -> 컨테이너를 실행하여 컴파일된 바이너리가 포함된 새 컨테이너 생성 -> 후속 실행으로 컴파일된 컨테이너 실행
이는 기본적으로 기존 컨테이너 위에 새 컨테이너를 겹겹이 쌓는 것이기 때문에 이것이 가능할 것 같지만 저는 도커 초보자입니다.
답변1
모든 호스트가 고유하기 때문에 제가 생각해 낼 수 있는 최선의 솔루션은 지속성을 위해 볼륨을 사용하는 것입니다. 진입점에는 다음 워크플로가 필요합니다.
- 볼륨에서 컴파일된 코드의 버전을 확인하세요.
- 버전이 일치하지 않으면 볼륨 내용을 삭제하세요.
- 버전이 설정되지 않았거나 일치하지 않으면 컴파일을 실행하십시오.
- 해당 볼륨에 새 버전 번호를 씁니다.
- 볼륨의 컴파일된 버전에서 앱을 실행하세요.
이를 위해서는 이미지 빌드에 git 해시와 같은 버전 번호가 포함되어야 합니다. 빌드 인수를 사용하여 이 작업을 수행할 수 있습니다.
docker build --build-arg GIT_REV=$(git rev-parse --short HEAD) ...
그러면 Dockerfile에는 다음과 같은 내용이 포함됩니다.
ARG GIT_REV
ENV GIT_REV=${GIT_REV}
볼륨 없이 실행하는 모든 사용자는 여전히 모든 실행이 컴파일을 수행하는 것을 볼 수 있습니다.