수색…


Docker를 사용하는 Jenkins CI 컨테이너

이 장에서는 호스트의 Docker 설치 (Docker Daemon)에 Docker 명령을 전송할 수있는 Jenkins 내부에 Docker Container를 설치하는 방법에 대해 설명합니다. Docker에서 Docker를 효과적으로 사용함. 이를 위해 우리는 공식 Jenkins Docker Image의 임의의 버전을 기반으로하는 사용자 정의 Docker Image를 작성해야합니다. Dockerfile (이미지 작성 방법)은 다음과 같습니다.

FROM jenkins

USER root

RUN cd /usr/local/bin && \
curl https://master.dockerproject.org/linux/amd64/docker > docker  && \
chmod +x docker  && \
groupadd -g 999 docker && \
usermod -a -G docker jenkins
    
USER Jenkins

이 Dockerfile은이 클라이언트가 Docker Daemon과 통신하는 데 사용되는 Docker 클라이언트 바이너리가 포함 된 이미지를 만듭니다. 이 경우 호스트의 Docker Daemon. 이 파일의 RUN 문은 UID 999를 사용하여 UNIX 사용자 그룹을 작성하고 사용자 Jenkins를 추가합니다. 이것이 정확히 필요한 이유는 다음 장에서 설명합니다. 이 이미지를 사용하면 Docker 명령을 사용할 수있는 Jenkins 서버를 실행할 수 있지만이 이미지를 실행하면 이미지 내부에 설치된 Docker 클라이언트가 호스트의 Docker Daemon과 통신 할 수 없습니다. 이 두 구성 요소는 UNIX 소켓 /var/run/docker.sock 통해 통신합니다. Unix에서 이것은 다른 모든 파일과 같은 파일이므로 젠킨스 컨테이너에 쉽게 마운트 할 수 있습니다. 이 작업은 docker run -v /var/run/docker.sock:/var/run/docker.sock --name jenkins MY_CUSTOM_IMAGE_NAME 명령을 사용하여 수행됩니다. 그러나이 마운트 된 파일은 docker:root 의해 소유됩니다 docker:root 이 때문에 Dockerfile은 UID를 잘 알고이 그룹을 만들고 Jenkins 사용자를 추가합니다. 이제 Jenkins Container가 Docker를 실제로 실행하고 사용할 수 있습니다. 프로덕션에서 run 명령에는 Jenkins_home 디렉토리를 백업하는 -v jenkins_home:/var/jenkins_home 과 네트워크를 통해 서버에 액세스하기위한 포트 매핑이 포함되어야합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow