제가 초반에 docker와 jenkins를 설치하는 방식을 충분히 이해하지 못하여 많은 시간 동안 어려움을 겪었습니다. 때문에 이 부분을 짚고 넘어가려 합니다.
무작정 해당 기술을 사용하기보다, 실행 원리를 이해하는 것이 중요하니까요. ^__^
Jenkins를 설치하는 여러 방식이 있지만,
저는 Docker를 사용하는 환경에서 Jenkins를 사용하겠다고 했습니다.
그런데 이 Docker와 Jenkins를 설치하는 방식도 여러 가지가 있습니다. 🙀
주로 다음과 같은 방식들이 있는데요. (모두 이해하려고 하기보다 머릿속으로 그림을 그리며 읽어보세요..)
1. Docker 컨테이너 안에 Jenkins 설치하기 (Dockerized Jenkins)
2. Docker 컨테이너에서 Docker 실행하기 (Docker-in-Docker)
3. Docker 호스트에서 Jenkins와 Docker를 직접 연결하기 (Docker Socket)
참고로, 제가 사용한 방식은 3번입니다.
그럼 이제 1번부터 설명을 해보겠습니다.
Docker를 사용해 Jenkins를 컨테이너 내부에 설치하는 방법
명령어
docker run -d -p 8080:8080 --name jenkins jenkins/jenkins:lts
장단점
| 장점 | 단점 |
|---|---|
| - 간단한 설치 | - 리소스 제한 |
| - 격리된 환경 | - 스토리지 관리 |
| - 유연한 배포 |
즉, Docker 컨테이너 안에서 Jenkins를 실행하는 방식 입니다.
이 방식은 간편하고 빠르게 Jenkins 환경을 설정할 수 있지만, 리소스나 성능 제한이 있을 수 있어 규모가 큰 프로젝트에서는 성능을 고려한 추가 설정이 필요합니다.
Docker 컨테이너 내에서 또 다른 Docker를 실행하는 방식
주로 Jenkins와 결합하여 사용되며, Jenkins의 빌드 프로세스 중 Docker 컨테이너를 사용해야 할 경우에 유용합니다.
예를 들어, Jenkins의 빌드 작업이 Docker 컨테이너를 사용해야 하는 경우, Jenkins는 Docker 이미지를 사용하여 또 다른 Docker 컨테이너를 실행하게 됩니다.
이 방식은 Docker-in-Docker라고도 하는데요
Docker 소켓을 호스트와 컨테이너 간에 공유하여, 컨테이너가 호스트의 Docker Daemon을 직접 사용할 수 있도록 하는 방식
Jenkins가 호스트 시스템의 Docker를 제어할 수 있게 해줍니다.
명령어
docker run -d -p 8080:8080 --name jenkins \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts
장단점
| 장점 | 단점 |
|---|---|
| - Docker와 Jenkins 통합 용이 | - 보안상 위험 |
| - 리소스 최적화 | - 권한 관리 |
이 방식은 성능이 뛰어나고 통합이 원활하지만, 보안에 신경을 써야 하며 적절한 권한관리로 위험을 최소할 필요가 있겠습니다.
글 잘 읽었습니다.