2016-09-22 3 views
3

저는 C++ 프로젝트 빌드를 도커 이미지로 옮기는 작업을하고 있습니다. 이미지는 젠킨스 (Jenkins)의 직업에 의해 만들어지고 밀려날 것입니다. 도커 이전에는 Jenkins에서 빌드 속도를 높이기 위해 ccache를 많이 사용했습니다. 특히 빌드가 거의 변경되지 않은 경우에 그러했습니다. docker 문제는 빌드가 고립 된 환경에서 실행되므로 더 이상 ccache를 사용할 수 없다는 것입니다. ccache를 여전히 활용하면서 임시 컨테이너의 내부를 빌드하는 방법이 있습니까?docker 내부에 빌드 할 때 ccache 사용

답변

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 변수를 지정)는 캐시를 활용합니다.

Using Ccache with Docker

+0

의 문제점은 (그리고 난 그냥 오해 될 수있다) 내 빌드의 결과로 이미지를 만들 걸려 :

이 블로그 게시물을 설명하는 좋은 기능이있다. 이 접근 방식은 컨테이너에서 ccache를 사용할 수있게하지만 docker 빌드 명령으로는 사용할 수 없습니다. –

+1

'ROCK' 명령을 사용하여 Dockerfile에'ccache'를 추가하거나 Docker Compose를 사용하여'docker-compose build' 중에 볼륨을 마운트하고 사용할 수 있습니다. 'docker commit'을 사용하여 이미지에 컨테이너를 저장할 수도 있습니다. –

+0

그래, 위의 "도커 커밋"을 결합하는 것이 아마도 최상의 경로라고 생각합니다. 고맙습니다. –

관련 문제