-
[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에 자체 설치하는 방식은 개발자 혹은 인프라를 구성하는 사람이 고생(?)을 하면 해결되는 문제라고 생각한다.
'프로젝트 > 아카이뷰' 카테고리의 다른 글
[React] HOC를 활용한 사용자 인가 처리 (0) 2024.08.12 [CI/CD] Jenkins / GitLab / Docker / EC2 연동 (2/2) (0) 2024.01.31 [CI/CD] Jenkins / GitLab / Docker / EC2 연동 (1/2) (0) 2024.01.30 [Docker] RUN / CMD / ENTRYPOINT의 차이 (0) 2024.01.29 [CI/CD] Jenkins란? (0) 2024.01.27