저번 포스트에서, AWS EC2 인스턴스를 만들었다.
이번 포스트에서는 인스턴스에 Docker와 Jenkins를 설치할 것이다.
먼저, Swap Memory 설정으로 인스턴스의 메모리를 늘려줄 것인데, 필자는 Windows 사용자이므로, SSH 접속을 위해 Git Bash를 사용할 것이다.
인스턴스에서 인스턴스 ID -> 연결 -> SSH 클라이언트로 가면, SSH 접속을 위한 명령어가 준비되어있다.
이 명령어를, Git Bash에 입력해야 하는데, 먼저 인스턴스의 Pem 키를 보관하고 있는 폴더로 경로를 이동해준 다음, 명령어를 입력해주자.
그러면 위와같은 안내문이 뜰텐데, 이는 SSH 접속 시 정상적인 첫 연결 확인 메시지이므로, 당황하지 말고 yes를 입력해주자.
위 안내문은 해석하면, 처음 접속하는 EC2 인스턴스라서 Git Bash가 호스트를 신뢰할 수 없다고 알려주는 것이다. 보안상 처음 접속 시 호스트를 확인하고, 사용자가 신뢰하면 저장하게 된다.

yes를 입력하면 위와 같은 메시지가 출력되게 되며, SSH 접속이 완료된다. Ubuntu로 설정해서 인스턴스를 만들었으므로, Ubuntu 명령어를 사용해야한다.
Jenkins를 EC2에 다이렉트로 설치하지 않고, Docker를 이용해 컨테이너로 설치할 것이다. 하지만 Docker나 Jenkins는 메모리가 충분하지 않으면 제대로 동작하지 않는 경우가 많다고 한다. 따라서 HDD 용량 일부를 메모리로 가용하는 Swap Memory 설정을 해줄 것이다.
먼저, HDD 용량을 확인하기 위해 아래 명령어를 입력해주자.
df -h
5.9GB 정도 남아있다. 이 중에서 2GB 정도를 메모리로 할당할 것이다. 다음 명령어를 입력해주자.
sudo fallocate -l 2G /swapfile
할당한 /swapfile을 사용해서 swap memory를 활성화시키자.
sudo mkswap /swapfile
sudo swapon /swapfile
swap 파일 권한에 대한 안내문이 나오는데, 신경 쓸 필요는 없다.
이 설정이 인스턴스가 재시작되어도 유지되도록 수정해준다.
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
swap memory가 잘 할당되었는지 확인한다.
free
swap memory가 잘 할당된 모습이다.
아래 명령어를 입력해준다.
# 패키지 업데이트
sudo apt update
sudo apt upgrade -y
# Docker 설치
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
# 현재 사용자로 Docker 명령 실행 가능하게 추가
sudo usermod -aG docker $USER
다 설치하고 나면, exit 명령어를 입력해 SSH 로그아웃 한 후, 재접속 해주고, Docker가 잘 설치되었는지 확인해주자.
docker --version
설치가 잘 되었다.
테스트용으로, Docker에 hello-world 이미지를 실행해보자.
sudo docker run hello-world
hello-world 이미지는 한번 실행된 후 종료되는 이미지이다.
Docker 설치 완료!
설치 도중에 GUI 같은 창이 나오는데, 이는 Ubuntu 서버에서 패키지를 설치할 때 나오는 Debian/Ubuntu 텍스트 기반 구성 창이다.
Tab키를 누르면 포커스가 이동하고 Enter키로 선택한다. 대부분의 경우 그냥 OK만 해줘도 된다.
docker run --name jenkins -d -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
jenkins를 docker에서 실행시키며 8080, 50000포트로 들어오는 요청을 jenkins가 받을 수 있도록 포워딩한다. 해당 명령어를 수행하면 jenkins가 설치되게 된다.

하지만 필자는 8030 포트로 매핑을 하고싶기 때문에, 8080으로 매핑했던 Jenkins 컨테이너를 삭제하고 다시 설치하기로 결정했다.
1. 현재 실행중인 Jenkins 컨테이너 중지 & 삭제
# 실행 중인 컨테이너 확인
docker ps
# jenkins 컨테이너 중지
docker stop jenkins
# 컨테이너 삭제
docker rm jenkins
여기서 -v jenkins_home:/var/jenkins_home 볼륨은 그대로 남아 있으므로, 데이터(설정, 플러그인)는 유지된다.
2. 새 포트(8030)로 Jenkins 실행
docker run --name jenkins -d \
-p 8030:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
http://<EC2_PUBLIC_IP>:8030으로 접근 가능하다.3. 확인
docker ps
EC2 서버를 껐다 킬때, 이미 만들어 놓은 jenkins 컨테이너를 실행하고 싶다면, 아래 명령어를 입력하도록 하자. 서버를 다시 킬 경우, EC2_PUBLIC_IP가 바뀌므로 유의하자.
docker start jenkins
이제 http://<EC2_PUBLIC_IP>:8030으로 접근하면, 이전에 Jenkins 설치 때 봤던 페이지가 나온다.
처음 Jenkins를 실행하면, Admin Password를 입력해줘야한다. 이전에는 Windows에 설치하면서 세팅해준 Admin Password를 입력해주면 됐지만, 이번에는 Docker 내부에 설치했으므로 다른 방법이 필요하다.
Docker 내부에 있는 Jenkins 컨테이너에 들어가야한다. 다음 명령어를 입력하자
docker exec -it jenkins bash
그러면, Docker 안에 있는 jenkins 컨테이너에 들어가서, Bash shell을 실행시키게 된다.
이제, Admin Password를 확인하기 위해 다음 명령어를 입력하자
cat /var/jenkins_home/secrets/initialAdminPassword
위 명령을 입력하면, Admin Password가 나올텐데, 그것을 http://<EC2_PUBLIC_IP>:8030에 입력해주자.
그러면, Jenkins의 초기세팅 페이지가 나온다. 이전 Jenkins 설치글에서 설치한 방식대로 진행해주자.
URL은 도메인 주소가 있다면 그것을 넣으면 되고, 아니라면 기본세팅으로 http://<EC2_PUBLIC_IP>:8030으로 설정해준다.
그렇게 하면, Jenkins 대시보드로 이동하게 된다.
몇 가지 해야 할 설정들이 있으니, 톱니바퀴 버튼을 눌러서 Jenkins 관리 탭으로 들어가자.
플러그인을 추가로 설치할 것이므로, 플러그인으로 들어간다.
Available plugins에 들어가면 다양한 플러그인들이 나오는데, 지금 설치할 것은 ssh 통신을 열어서 인스턴스간 통신할 수 있는 ssh Agent 플러그인과 현재 빌드 단계를 시각화해주는 stage view 플러그인이다. 검색해서 설치해주자.
이제 EC2에서 해야할 기본적인 세팅은 끝났다.
다음 포스트에서는 Jenkins를 사용해볼 것이다.