2017-10-27 5 views
1

도커 컨테이너에 패키지를 설치하는 방법을 알고 싶습니다. 나의 사용법은, 나는 docker 에이전트 템플리트를 포함하여 몇 가지 종류의 에이전트가있는 젠킨스 서버를 가지고 있는데, 이는 가상 컴퓨터 환경이 필요하지 않으면 기본적으로 레이블없이 각 빌드에 대해 도커 컨테이너를 만들고 사용합니다. 문제는 가능하면 안전한 방법으로 이러한 도커 컨테이너에 빌드하기 전에 종속성을 설치하는 것입니다. 별도의 요구 사항을 가진 다른 프로젝트에 대해 각각 많은 이미지를 갖는 것이 좋은 아이디어라고 생각하지 않으며 일부 프로젝트가 종속성을 필요로 할 때마다 단일 이미지를 수정하면 그 중 많은 이미지가 필요할 경우를 대비하여 이미지를 부 풀릴 것입니다. 하지만 일반적으로 보안상의 이유로 컨테이너 내부에는 루트 액세스가 없습니다. 이 상황에 대처하는 방법/가능한 옵션은 무엇입니까?도커 컨테이너에 패키지를 설치하십시오.

답변

1

젠킨스에서는 에이전트가 생성되는 고정 이미지를 지정할 수 있습니다.

예 : 당신이 필요한 종속성을 포함 dockerhub에 공공 이미지를 찾을 수없는 경우

agent { 
    docker { 
     image 'maven:3-alpine' 
     label 'my-defined-label' 
     args '-v /tmp:/tmp' 
    } 
} 

, 당신은 사용자 정의 이미지를 만들어야합니다. 그렇게하는 방법은 Dockerfile을 생성하고 Dockerfile에 종속물을 설치하는 것입니다.

FROM base-image 
RUN apt-get update && apt-get install ... 

그런 다음 에이전트를 에이전트를 구축하거나, 이미지를 구축하고 젠킨스 호스트에 넣고 규정에 위의 파이프 라인 구문을 사용하려면이 Dockerfile을 사용 중.

당신은 직접 Dockerfile를 사용할 수 있습니다

agent { dockerfile { dir 'path-to-Dockerfile' } } 
+0

잘, 솔직히 말해서, 나는 그 스크립트의 보안에 대해 확실하지 않다. jenkinsfile을 작성하고 커밋 할 수있는 사람은 파이프 라인 스크립트를 사용하여 마스터 노드를 손상 시키거나 실행중인 고정 노드를 손상시킬 수 있습니다. 내가 맞습니까? 나는 도커 파이프 라인을 사용하고 있지 않지만 각 빌드가 기본적으로 명시 적으로 요청하지 않고 자체 컨테이너에서 실행되는 클라우드 도커 플러그인이지만 여러 템플릿을 만들지 않는 한 하나의 이미지 만 가진다. –

+0

올바르게 이해한다면 잘 모르겠지만 현재 파이프 라인을 배우지 않았기 때문에 파이프 라인을 스크립팅 할 수 있으며 그 스크립트는 너무 제한되어 있지 않으므로 이론적으로 모든 노드와 함께 할 수 있습니다. 스크립트 조각이 계속 실행됩니다. 맞습니까? 따라서 도커 컨테이너를 실행할 수는 있지만 보안 경계로 완전히 사용할 수는 없습니다. 내가 말한 것이 잘못 되었다면 그 목적을 위해 파이프 라인을 사용할 것입니다. –

관련 문제