먼저 도커를 설치해보자. 다음 명령어를 차례로 실행하면 도커가 설치가 완료된다.
# 1. 패키지 목록 업데이트
sudo apt update -y
# 2. 필수 패키지 설치 (HTTPS를 통한 리포지토리 사용)
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 3. Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 4. Docker stable 저장소 추가
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 패키지 목록 업데이트
sudo apt update -y
# 6. Docker CE 설치
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 7. Docker 서비스 시작 및 부팅 시 자동 실행
sudo systemctl start docker
sudo systemctl enable docker
# 8. 현재 사용자로 Docker 실행 가능하게 설정
sudo usermod -aG docker $USER
# 9. 적용 위해 로그아웃 후 재접속 또는
newgrp docker
# 10. 설치 확인
docker --version
docker info
2번 과정이 필요한 이유는 다음과 같다.
1. ap-transport-https: apt 패키지 관리자가 https 프로토콜로 저장소에 접속할 수 있게 한다. 도커 저장소는 https url이기 때문에 https 프로토콜로 무조건 접속해야한다.
2. ca-certificates: https 연결 시 ssl/tls 인증서를 검증하는 데 사용한다. 도커 저장소가 신뢰할 수 있는 서버인지 확인하고, 이게 없으면 apt가 신뢰할 수 없는 서버라고 취급해 설치를 막는다.
3. curl: url에서 파일을 다운로드할 때 사용한다.
4. software-properties-common: 우분투에서 외부 저장소를 쉽게 추가 및 관리할 때 사용한다.
즉, 도커 공식 저장소에서 패키지를 안전하게 다운로드하기 위해 필요한 것들을 설치하는 단계이다.
다음으로는 젠킨스를 도커에서 이미지를 가져와서 컨테이너로 실행시킬 것이다.
먼저 젠킨스 이미지를 받아와준다.
docker pull jenkins/jenkins
다음으로는 폴더를 하나 생성해준다. 이 폴더는 볼륨처럼 사용할 예정이다. 또한 sudo 권한 없이 사용자가 해당 폴더에 쓸 수 있도록 권한을 부여한다.
sudo mkdir /home/jenkins
sudo chown -R $USER:$USER /home/jenkins
이제 다음 명령어를 실행해서 젠킨스 이미지를 실행한다.
docker run -d -p 9090:8080 -p 50000:50000 --name jenkins -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:latest
1. docker run -d
docker run
도커 컨테이너를 새로 생성하고 실행한다. detached 모드로 실행해서 백그라운드에서 실행될 수 있도록 한다.
2. -p 9090:8080
포트 포워딩을 설정하는 부분이다. -p <호스트 포트>:<컨테이너 포트>이고, 컨테이너 내부 Jenkins 웹 UI(8080포트)를 EC2 퍼블릭 IP의 8080포트로 연결하는 부분이다. 그 결과 브라우저에서 http://퍼블릭EC2-IP:9090으로 접속할 수 있다.
**외부에서 9090으로 요청이 들어오면 내부 컨테이너의 8080으로 전달
3. -p 50000:50000
Jenkins 에이전트(슬레이브) 연결용 포트이다. Jenkins는 빌드 에이전트를 분산 실행할 수 있는데, 이때 컨테이너와 통신할 포트이다. 로컬에서는 필요없을 수 있지만, 멀티 에이전트 환경에서는 필수적이다.
**외부에서 50000으로 요청이 들어오면 내부 컨테이너의 50000으로 전달
4. --name jenkins
컨테이너 이름을 지정한다.
5. -v /home/jenkins:/var/jenkins_home
호스트 볼륨을 마운트한다. 본래 경로 없이 jenkins:/var/jenkins_home이라면 볼륨 생성 후 jekins_home이라는 이름의 볼륨을 jenkins 컨테이너 내부의 /var/jenkins_home 경로에 연결하는 것이지만, 앞에 경로를 지정해주면 호스트 특정 폴더를 볼륨 처럼 사용하도록 하는 것이다.
6. -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:latest
젠킨스에서 도커 명령어를 사용할 수 있게 도커 데몬 소켓을 마운트해준다.
7. jenkins/jenkins:lateset
사용 이미지를 지정한다.
이제 http://ec2퍼블릭ip:9090으로 접속하면 다음과 같은 화면이 나타난다. 주의해야할 점은 해당 ec2 인바운드 규칙에 9090포트를 열어줘야한다는 점이다.

방금 전 도커 이미지를 실행하면서 젠킨스와 연결해준 폴더 경로로 들어가면 초기 비밀번호를 확인할 수 있다.
cat /home/jenkins/secrets/initialAdminPassword'AWS' 카테고리의 다른 글
| EC2 저장공간 부족 문제 해결 (0) | 2026.02.20 |
|---|---|
| EC2를 NAT 인스턴스로 구성하는 중 발생한 문제 해결 (Feat. FORWARD 체인을 확인하자) (0) | 2026.01.02 |
| IntelliJ에서 EC2 원격 접속 (0) | 2026.01.02 |
| AWS 스왑 메모리 설정 (0) | 2025.12.01 |