ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CI/CD] Docker를 이용해서 Jenkins를 사용해야 할까?
    프로젝트/아카이뷰 2024. 2. 1. 10:24

    Jenkins in Docker 왜 궁금했을까❓

    SSAFY 2학기 프로젝트 Archiview를 Docker에 Jenkins를 올리는 형태로 CI/CD를 구축하고 있었는데 Jenkins안에서 docker 명령어를 써야하는 상황이 발생했다. jenkins에는 docker가 설치되어 있지 않아 방법을 알아보고 해결해보고자 한다.

     

    우선, jenkins를 이용하는 방식을 두 가지로 나뉜다.

     

    ① OS에 설치하는 방식

    • Ubuntu, CentOs 등 리눅스 서버 자체에 jenkins를 설치하는 방식이다.
    • jenkins를 직접 설정할 수 있다는 부분이 가장 큰 장점인 거 같다.
    • 단점으로는 매번 플러그인, 설정 등을 직접 셋팅을 해줘야 한다는 점이다.

    ② 도커를 통해서 설치하는 방식

    • 리눅스 서버에서 Docker를 이용하여 Jenkins를 설치하는 방식이다.
    • 플러그인, 설정 등을 완료하고 이미지화를 시켜놓을 수 있으며 Docker Hub 등을 통해서 쉽게 설치를 할 수 있다.
    • 독립적으로 동작하여 다른 시스템에 영향을 주지 않는다.
    • 단점으로는 Docker에 대한 이해가 필요하다. 네트워크 설정, 컨테이너 등에 대한 지식 없이 사용하게 되면 오류에 대한 원인 파악이 불가할 것이라 생각된다.
    • 또한, jenkins에서 docker를 사용해야 하는 상황이 발생하면 docker를 사용할 수 있는 방법이 두 가지 존재하는데 해당 방법들은 문제점을 포함하고 있다.

    DID(Docker in Docker)

    • Docker in Docker는 Docker로 Jenkins를 올리고 jenkins에서 Docker를 또 설치하는 방식을 말한다.
    • jenkins를 이용해서 빌드하고 이미지화 하는데 docker가 필요해서 쉽게 작업을 수행할 수 있다.
    • 격리된 환경을 만들 수 있지만 보안상의 문제로 인해서 공식적으로 권장하지 않는 방법이다.

    DOD(Docker out of Docker)

    • Docker out of Docker는 호스트의 docker 데몬을 가져와서 jenkins 컨테이너에서 docker를 사용하는 방식이다.
    • 단순히 docker.sock 파일을 mount 시키기만 하면 환경을 구성할 수 있다.
    • 하지만, 호스트의 docker 데몬을 사용하기 때문에 보안상의 문제가 발생할 수 있다. 컨테이너에서 docker ps와 같은 명령어를 입력하면 호스트의 docker container 목록이 출력된다. 또한, 호스트 시스템에 대한 접근 권한을 얻게 될 수도 있다는 문제점이 존재한다.
    • 컨테이너간의 격리가 제대로 이뤄지지 않아 jenkins container에서 docker 명령어가 다른 컨테이너에게 영향을 끼칠 수 있다는 문제점이 존재한다.
    모든 결과를 종합해봤을 때, 도커에 Jenkins를 설치하는 방식은 시스템적으로 문제점이 존재하고, OS에 자체 설치하는 방식은 개발자 혹은 인프라를 구성하는 사람이 고생(?)을 하면 해결되는 문제라고 생각한다.
Designed by Tistory.