EC2 에서 Docker 로 Jenkins 설치 쉽게하기

안녕하세요 오늘은 BESPIN GLOBAL CX실 박용현님이 작성해주신 ‘EC2 에서 Docker 로 Jenkins 설치 쉽게하기’에 대해 소개해드리고자 합니다.

목차
  1. Swap 메모리 설정
  2. EC2 에 Docker 설치
  3. Docker 서비스 실행
  4. Docker User 권한 설정
  5. Jenkins 설치
  6. Jenkins 접속
  7. Docker 명령어
1. Swap 메모리 설정

프리티어 기준 EC2 메모리는 1GB입니다. 따라서 서버가 뻗어버릴 수도 있고, 성능에도 문제가 생길 수 있기 때문에, Swap 메모리를 확보하는게 좋습니다

1.1. Swap 메모리 상태 확인

free 또는 free -h

1.2. Swap 메모리 확보

AWS 공식 가이드

1.2.1. Swap 파일 생성

sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  • 명령에서 bs는 블록 크기이고 count는 블록 수입니다.
  • dd 명령을 사용하여 root 파일 시스템에 swap file을 생성합니다.
    일반적으로 2GB를 증설시키며, 이 명령어도 동일하게 작동합니다. (128MB x 16 = 2048MB)

1.2.2. 생성된 Swap 파일 권한 부여

sudo chmod 600 /swapfile

1.2.3. Linux 스왑 영역 설정

sudo mkswap /swapfile

1.2.4. 스왑 공간에 스왑 파일을 추가하여 사용

sudo swapon /swapfile

1.2.5. 작업 성공 확인

sudo swapon -s

1.2.6. 부팅 시 Swap 파일 활성화

sudo vi /etc/fstab

1.2.7. 마지막 줄에 아래 내용 추가

/swapfile swap swap defaults 0 0

1.3. Swap 메모리 확인

Swap 메모리 확인
2. EC2 에 Docker 설치
EC2 에 Docker 설치
3. Docker 서비스 실행
Docker 서비스 실행
4. Docker User 권한 설정
Docker User 권한 설정
5. Jenkins 설치
Jenkins 설치
  • docker run: Docker 컨테이너를 시작하는 명령어입니다.
  • -d: 이 옵션은 ‘detached mode’ 또는 ‘background mode’라고 불리며, 컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력합니다.
  • -p 8000:8080: 호스트 시스템의 포트 8000을 컨테이너의 포트 8080에 바인딩합니다. 이렇게 하면 호스트 시스템에서 접근 가능한 서비스를 제공할 수 있습니다.
  • -v /jenkins:/var/jenkins_home: 호스트 시스템의 /jenkins 디렉터리와 컨테이너 내부의 /var/jenkins_home 디렉터리를 연결(volumes)합니다. 즉, 데이터가 호스트와 컨테이너 사이에 공유됩니다.
  • -v /var/run/docker.sock:/var/run/docker.sock: 도커 소켓 파일인 /var/run/docker.sock을 컨테이너 내부와 연결합니다. 이는 Jenkins가 도커 CLI 명령어에 액세스하여 다른 도커 이미지나 컨테이너 등을 관리할 수 있게 해줍니다.
  • --name jenkins: 생성되는 Docker 컨테이너 이름을 “jenkins”로 설정합니다.
  • -u root: Jenkins 프로세스가 root 사용자로 실행되도록 합니다.
  • jenkins/jenkins:lts: Docker Hub에서 가져올 이미지 이름입니다. 여기서는 LTS(Long Term Support) 버전의 Jenkins 이미지를 가져오게 됩니다.

따라서 전체적으로 본다면, 위의 명령은 “root 권한으로 Jenkins LTS 버전 이미지를 기반으로 한 Docker 컨테이너를 백그라운드에서 실행하며, 호스트의 8000 포트와 컨테이너의 8080 포트를 연결하고, /jenkins 디렉터리와 Docker 소켓을 컨테이너에 마운트하며, 컨테이너 이름을 ‘jenkins’로 설정한다”라는 의미입니다.

docker ps # 실행되고 있는 컨테이너 목록
docker ps -a # 실행되고 있지 않는 컨테이너도 포함한 목록
6. Jenkins 접속

접속 주소는 AWS 인스턴스 IPv4:jenkins 포트번호(8000) 입니다. IPv4:PORT

Jenkins 접속

최초로 접속 시 요구하는 패스워드가 존재합니다.

위에서 요구하는 패스워드는 도커 컨테이너 안에 특정파일 안에 존재합니다.

# docker의 jenkins 컨테이너로 접속하여 /var/jenkins_home/secrets/initialAdminPassword 읽기
$ docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Jenkins 접속

Install suggested plugins 선택하여 플러그인을 설치합니다.

Jenkins 접속

Admin 계정을 생성합니다. (계정을 까먹지 않도록 유의합니다.)

Jenkins 접속

Jenkins URL이 ec2 인스턴스의 퍼블릭 IPv4:PORT와 동일한지 확인 한 뒤 Save and Finish를 선택합니다.

Jenkins 접속

위와 같은 화면이 나왔다면 성공입니다.

7. Docker 명령어
docker start [컨테이너ID or 컨테이너Name] # 컨테이너 실행
docker stop [컨테이너ID or 컨테이너Name] # 컨테이너 중지
docker rm [컨테이너ID or 컨테이너Name] # 컨테이너 삭제

여기까지 ‘EC2 에서 Docker 로 Jenkins 설치 쉽게하기’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다. 

Written by 박 용현 / CX실

BESPIN GLOBAL

0