저는 C++ 프로젝트 빌드를 도커 이미지로 옮기는 작업을하고 있습니다. 이미지는 젠킨스 (Jenkins)의 직업에 의해 만들어지고 밀려날 것입니다. 도커 이전에는 Jenkins에서 빌드 속도를 높이기 위해 ccache를 많이 사용했습니다. 특히 빌드가 거의 변경되지 않은 경우에 그러했습니다. docker 문제는 빌드가 고립 된 환경에서 실행되므로 더 이상 ccache를 사용할 수 없다는 것입니다. ccache를 여전히 활용하면서 임시 컨테이너의 내부를 빌드하는 방법이 있습니까?docker 내부에 빌드 할 때 ccache 사용
3
A
답변
4
빌드와 함께 ccache를 계속 사용할 수 있습니다.
데이터가 다음 명령을 사용하여 빌드/컴파일간에 유지 할 수 있도록하기 위해 Data Volume 만들기 :
$ docker create -v /mnt/ccache:/ccache --name ccache debian
는 그런 다음 컨테이너를 만들 것을 "마운트"를 --volumes-from
명령 줄 옵션을 사용하여 위에서 만든 데이터 컨테이너.
$ docker run -e CCACHE_DIR=/ccache --volumes-from ccache -it debian
이제 데비안 용기의 쉘에있을거야하고 필요한 응용 프로그램 및 테스트 ccache 설치할 수 있습니다
이[email protected]:/# apt-get update && apt-get install -y gcc ccache
지금이 시점에서 캐시를 확인 할 수 있습니다, 그것은 것입니다 예상대로 비어 있음 :
[email protected]:/# ccache -s
cache directory /ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 1.0 Gbytes
데이터 볼륨이 계속 유지되므로 컨테이너가 종료 된 후에도 캐시는 그대로 유지됩니다. 볼륨을 마운트하고 (-e ENV 변수를 지정하는) 향후 빌드는 캐시를 활용합니다.
그런 다음, 간단한 응용 프로그램을 만들고 실행하고 다시 캐시를 확인 :
[email protected]:/# cat > foo.c << __EOF__
int main(int argc, char **argv)
{
return 0;
}
__EOF__
[email protected]:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c
[email protected]:/# ccache -s
cache directory /ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
files in cache 2
cache size 8 Kbytes
max cache size 1.0 Gbytes
당신은 캐시가 현재 채워집니다 볼 수 있고, 더 그것 때문에 성능 향상을 볼 구축합니다.
데이터 볼륨이 지속되므로 컨테이너가 종료 된 후에도 캐시는 계속 유지됩니다. 볼륨을 마운트하는 미래의 빌드 (그리고 -e ENV
변수를 지정)는 캐시를 활용합니다.
관련 문제
- 1. make와 함께 ccache 사용
- 2. XCode에서 ccache 사용하기 4
- 3. Dockerfile 오류를 빌드 할 때 사용 apt-get을 GCC
- 4. Docker 빌드 태그 저장소 이름
- 5. Windows에서 Qt Creator로 ccache 설정
- 6. 우분투에서 ccache 설정하기
- 7. Docker 빌드 도중 Dockerfile ENV에 호스트 ENV를 주입하는 방법은 무엇입니까? 내가 로컬 빌드 할 때
- 8. 단순한 Dockerfile을 빌드 할 때 Docker 빌드 오류 "no such file or directory"가 표시됩니다.
- 9. Docker - 소스 파일에 Arg 빌드
- 10. Docker 빌드 npm 오류 로그
- 11. Docker Apache에서 PHP 사용
- 12. Docker : google/docker-registry 컨테이너 사용
- 13. 안드로이드 ccache 작업 공간 간 공유
- 14. 하위 Docker 파일에서 ARG 명령 사용
- 15. 로컬 개발에서 Docker 사용
- 16. 내부에 HTML을 삽입 할 때 SPAN을 분할 할 때
- 17. Jenkins가 생성 된 보고서로 도커 컨테이너 내부에 빌드
- 18. Docker 컨테이너에서 Java Gradle 프로젝트를 빌드 하시겠습니까?
- 19. 빌드 도커 이미지 내부에 파일 복사
- 20. Spotify docker maven 여러 이미지 빌드
- 21. docker 빌드 게시 플러그인에서 오류가 발생했습니다.
- 22. Docker 빌드 MySQL dockerfile 발생 없음 : 없음
- 23. Docker 빌드 : 보관 파일을 가져올 수 없습니다.
- 24. CMake를 빌드 할 때 기본이 아닌 libstdC++를 사용 하시겠습니까?
- 25. ghci에서 작동하는 ffi 라이브러리를 빌드 할 때 cabal 사용
- 26. Docker에서 빌드 할 때 동적 환경 변수 만들기
- 27. OSX의 여러 터미널 탭에서 docker/docker-machine 사용
- 28. ccache cache miss 많은 컴파일이 느려짐
- 29. 빌드 할 때 Tomcat 환경 전용 빌드 빌드 및 배포
- 30. php on docker : setLocale 사용
의 문제점은 (그리고 난 그냥 오해 될 수있다) 내 빌드의 결과로 이미지를 만들 걸려 :
이 블로그 게시물을 설명하는 좋은 기능이있다. 이 접근 방식은 컨테이너에서 ccache를 사용할 수있게하지만 docker 빌드 명령으로는 사용할 수 없습니다. –
'ROCK' 명령을 사용하여 Dockerfile에'ccache'를 추가하거나 Docker Compose를 사용하여'docker-compose build' 중에 볼륨을 마운트하고 사용할 수 있습니다. 'docker commit'을 사용하여 이미지에 컨테이너를 저장할 수도 있습니다. –
그래, 위의 "도커 커밋"을 결합하는 것이 아마도 최상의 경로라고 생각합니다. 고맙습니다. –