본문 바로가기
Web Development/MicroService Architecture

[MSA / Jenkins / Docker] Window Server OS에서 Jenkins 설치 (feat. Docker Toolbox, VirtualBox)

by 감자맹고우 2023. 5. 3.
728x90
반응형

▼ 이전 글에서는, Window 환경에서 Docker Desktop을 활용하여 Jenkins를 설치하고 빌드/배포 자동화를 구축하였다.

 

[MSA / Jenkins / Gitea] Webhook 이벤트 감지와 Jenkins 파이프라인을 통한 빌드/배포 자동화 방법 A to Z(feat

MSA 프로젝트를 진행하며, 코드를 수정하고 반영할 때마다 각각의 서비스를 수동적으로 다시 빌드하고 컨테이너로 올려야 하는 문제를 해결하기 위해, 빌드/배포를 자동화하도록 Jenkins를 도입하

devlifetestcase.tistory.com

 

그러나 Jenkins, Docker는 개발자의 로컬 PC가 아닌 서버에 설치가 되어야 하고 CI/CD 환경도 서버에 구축되어야 한다. 개발자는 IDE에서 코드만 작성하면 되도록 말이다.

그래서 서버에 구축을 하려고 보니, 서버는 OS도 다르고 환경도 로컬과는 다른 경우가 많다.

 

그 중에서도, 우리 팀 서버 환경은 Window Server라는 OS를 사용하고 있었고, Virtualbox로 가상 머신을 생성하여 이미 가상화 환경을 사용하고 있었다.

문제는, Docker와 Virtualbox는 모두 가상화 환경을 사용하고 있어 충돌이 발생하게 된다. 특히, Hyper-V의 사용여부에 따라 하나는 동작하고 하나는 동작하지 않게 된다.

 

어떻게 해결해야할까?

 

난감했다. Docker를 사용할 수 없어서 이대로 MSA 프로젝트를 포기해야하나 싶었다. 클라우드를 확보할 수도 없었으니까.

검색을 통해 찾아낸, 희망같던 Docker Toolbox는 Docker가 유료화되고 Docker Desktop으로 통합하면서 지원되지 않는다고 한다. Toolbox 설치 링크를 클릭했더니 Docker Desktop 페이지로 넘어간다.

 

그러나 이대로 포기할 수는 없었다.

더 살펴본 끝에, Docker Toolbox Github 주소로 설치하는 블로그 글을 발견했다.

 

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

| 경고 |

Docker Toolbox 설치 진행 전,

반드시! Virtualbox와 vdi, vbox, 호스트 네트워크 관리자의 어댑터, DHCP 서버 내용 등을 백업해두어야 합니다.

Virtualbox 버전이 변경될 수 있습니다.

반드시! 상급자의 허락이 있어야 합니다. 

문제 발생 시 책임지지 않습니다.

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

 

 

[Docker] tool box를 이용해 윈도우에 도커 설치하기

도커란? 리눅스 컨테이너 기술을 기반으로 하여 특정한 서비스를 서버로 배포하는 기능을 간편하게 할 수 있는 프로그램이다. 사실 도커를 이해하기 위해 기존의 서버환경 셋팅 방법, 기존의 가

sleepyeyes.tistory.com

 

다행히도 지원은 종료되었지만, Docker Toolbox의 Github는 유지되고 있었다.

( https://github.com/docker-archive/toolbox/releases )

 

그래서 위의 블로그 글을 참고해 Docker Toolbox를 설치했고, Window Server OS에서 Virtualbox와 Docker를 동시에 사용할 수 있게 되었다.

Docker Toolbox는 Virtualbox에 VM을 올려서 Docker를 실행한다. 그러다보니 Toolbox 설치 시에 Virtualbox를 재설치해야한다. 재설치하지 않으면 오류가 발생하며 사용할 수 없다.

 

경고문을 적긴 했지만, virtualbox 재설치 자체로는 vdi까지 삭제가 되거나 하진 않는 듯 하다. 외부 폴더로 vdi를 옮겼다면 VM에 '접근할 수 없음' 문구가 출력되며 연결이 끊길 수는 있다.

 

이 문제는 ChatGPT를 통해 해결하였는데, 해당 VM의 vbox 파일을 열어, 아래와 같이 진행하고 virtualbox를 재실행하면 연동되니 너무 걱정할 필요는 없다.

 

  1. 파일에서 "Display/@controller" 항목 등 비슷한 항목을 찾습니다. 이 항목이 현재 "VBOXSVGA"로 설정되어 있을 것입니다.
  2. "VBOXVGA"로 값을 변경합니다. 이 항목이 이미 "VBOXVGA"로 설정되어 있다면, 다른 항목이 손상되었을 가능성이 있습니다.

 

아무튼 재설치까지 진행하면, 반가운 고래 모양이 나오며 Docker를 실행할 수 있게 된다.

그럼 이제 Jenkins를 설치하고 CI/CD를 구축해보자.

 

 

[ 구축 방법 ]

 

일단 시작 전, 가장 기본적인 사용 방법을 숙지하자.

우선, Docker Quickstart Terminal을 통해 Docker를 실행할 수 있다.

별다른 설정없이 설치했다면, Virtualbox에 boot2docker.iso를 통해 생성된 default VM이 있을 것이다.

Terminal에서는 아래의 명령어를 통해 실행과 종료가 가능하다.

docker-machine start default
docker-machine stop default

 

이어서 jenkins를 설치해보자.

docker pull jenkins/jenkins

 

위의 명령어를 통해 jenkins 이미지를 받을 수 있다. 이어서 아래 명령어로 이미지를 컨테이너로 올려보자.

docker run -d -v jenkins_home:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /c/Users:/c/Users -v /c:/c -v /var/run/docker.sock:/var/run/docker.sock -v /c/tmp/docker.sock:/tmp/docker.sock -p 7088:8080 -p 50000:50000 --restart=on-failure --name jenkins-server jenkins/jenkins:latest

 

개발자 PC에서 실행할 때와 다른 옵션이 있다. 마운트 하는 부분이 다르다. 특히, C드라이브를 마운트할 때 c:/:/c/로 했었는데, 이는 Window 환경에서 가능하며, 현재는 VM을 통해 진행하기 때문에 /c:/c 로 마운트해야한다. 그리고 별도로 VM에서 공유 폴더 설정을 해주어야 한다.

대충 아래와 같이 default VM의 설정에서 공유 폴더로 들어가서 추가해주면 된다. 추가는 VM을 정지해야 할 수 있으며, 항상 사용하기 기능은 VM을 시작하면 자동으로 생성되어 체크된다.

(기본으로 설정된 c/Users 디렉토리와 추가로 c 경로만 공유 폴더로 지정하면 될 것이다)

 

 

▼ 그럼 이제 마운트가 잘 되었을테니 나머지 설치 작업은 이전과 똑같이 진행하면 될 것이다.

 

[MSA / Jenkins / Docker] Docker Desktop에 Jenkins 설치 방법 A to Z(feat. CI/CD)

MSA 프로젝트를 진행하면서, 여러 개의 서비스를 일일히 실행하고 관리해야하는 번거로움을 탈피하기 위해서, 계획과는 다르게 Docker를 빠르게 도입하게 되었다. 그리고, 한번에 실행하고 관리할

devlifetestcase.tistory.com

 

Docker Desktop이 아니므로, 컨테이너가 실행중인 지는 Terminal에서 명령어로 확인해야 한다.

docker ps

 

docker ps 명령어를 사용하면 실행 중인 컨테이너를 확인할 수 있다.

 

근데 jenkins 컨테이너까지 잘 동작하고 있는데, jenkins 웹 인터페이스로 접속하기 위해 서버에서 localhost:7088, 또는 원격으로 서버IP:7088 로 접속해보면 접속이 안될 것이다.

당연하다. 이는 VM에서 docker를 실행하고 있기 때문에 VM의 IP로 접속해야한다. 보통 VM의 주소가 192.168.99.100 이긴할텐데, Docker Quickstart Terminal에서 다음 명령어로 VM의 IP를 알 수 있다.

docker-machine ip default

 

이제 서버에서 192.168.99.100:7088 처럼 결과로 나온 VM IP와 jenkins 포트를 적어보면 접근 가능할 것이다.

근데 원격은? 또, 그대로 두면 서버에서도 원격으로 접속하는 것처럼 느껴져서 좋지 않다.

 

반응형

 

해결 방법은?

 

이 부분을 해결하기 위해서는, VM의 포트포워딩 설정을 해주면 된다.

 

 

위는 대략적인 포트포워딩 설정이다. jenkins부터 local private registry, 각종 외부에서 접근 가능이 필요해보이는 서비스는 포트포워딩 작업을 해주었다.

호스트 IP와 게스트 IP를 공백으로 두면, 알아서 매칭시켜준다.

이렇게 설정하고, 서버에서 localhost:7088 또는 원격으로 서버IP:7088로 접속해보면 잘 연결되는 것을 알 수 있다.

물론, 경우에 따라서 방화벽 문제를 해결하기 위해 인바운드/아웃바운드 규칙을 지정해주어야 할 수도 있다.

아무튼, 이후의 나머지 설치 작업은 동일하다.

 

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글