TIL

AWS EC2에 Docker Jenkins 설치, Github Webhook 연동 (3) | Docker in Docker

everyday-spring 2024. 11. 2. 19:31

https://everyday-spring.com/630

 

AWS EC2에 Docker Jenkins 설치, Github Webhook 연동 (1) | 최종_최최종_찐막_찐찐막

https://everyday-spring.com/628 Window PC에 Docker, jenkins 설치, GitHub 연동하기 (1) | 난 대학시절 삽질을 전공했단 사실시작에 앞서....Docker를... AWS EC2에 설치 했어야 하는데별 의심없이 개인 pc에 설치했다..

everyday-spring.com

 

https://everyday-spring.com/631

 

AWS EC2에 Docker Jenkins 설치, Github Webhook 연동 (2) | 윈도우 PuTTY EC2 연동하기 | EC2 메모리 스왑

https://everyday-spring.com/630 AWS EC2에 Docker Jenkins 설치, Github Webhook 연동 (1) | 최종_최최종_찐막_찐찐막https://everyday-spring.com/628 Window PC에 Docker, jenkins 설치, GitHub 연동하기 (1) | 난 대학시절 삽질을 전

everyday-spring.com

 

지난 글에서 EC2 ubuntu Instance에 Docker, Jenkins를 설치할 준비를 모두 마쳤다

Docker 설치 가보자고!

 

EC2 ubuntu Instance Docker 설치

앞서 접속을 완료한 PuTTY에서 진행하면 된다

 

sudo apt-get update

Ubuntu의 패키지 리스트를 최신 상태로 업데이트

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

Ubuntu의 패키지 리스트를 최신 상태로 업데이트한다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Docker 저장소의 공식 GPG 키를 시스템에 추가

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Docker의 공식 저장소를 시스템의 apt 소스 리스트에 추가

sudo apt-get update

새로운 저장소를 추가한 후 패키지 인덱스를 다시 업데이트

sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker CE(커뮤니티 에디션)와 CLI 도구를 설치

sudo systemctl start docker

Docker 서비스 실

sudo systemctl enable docker

시스템 부팅 시 Docker가 자동으로 시작되도록 설정

sudo usermod -aG docker ${USER}

sudo 없이 Docker 명령을 실행할 수 있도록 현재 사용자를 docker 그룹에 추가

docker --version

설치된 Docker의 버전 출력

 

Docker not found가 아닌 버전에 대한 정보가 뜬다면 Docker 설치 완료!!

 

Docker Jenkins 설치, Jenkins Container 실행

https://hub.docker.com/r/jenkins/jenkins

 

https://hub.docker.com/r/jenkins/jenkins

 

hub.docker.com

dockerhub에서 젠킨스 이미지를 받아오는 명령어를 확인할 수 있다

세팅이 되어있는 이미지 정보를 가져와서 컨테이너로 실행시킨다! 의 개념

 

docker pull jenkins/jenkins

젠킨스 컨테이너 실행을 위한 이미지를 받아온다

 

잠깐 구조를 살펴보자면

EC2에 Docker(1)를 설치했고

Docker(1)에서 Jenkins 컨테이너를 실행시키고

실행된 Jenkins에서 Docker(1)에 애플리케이션을 배포함

-> 이 배포 과정에서 Docker 명령어를 사용하기 위해서 Jenkins에도 Docker(2)를 설치해준다!

+ Jenkins에서 Docker(1)에 접근하기 위해 Jenkins 컨테이너를 실행 시킬 때 소켓을 열어준다! 

 

Docker(1) - Jenkins - Docker(2) 이런 구조고

이를 Docker in Docker 라고 함!

어쨌든 받아온 젠킨스 이미지를 실행시켜 보자 하하

 

 

https://github.com/jenkinsci/docker/blob/master/README.md

공식사이트에 나와있는 명령어에 필요한 옵션을 몇개 추가한다

docker run \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
--restart=on-failure \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-u root \
jenkins/jenkins:lts-jdk17

 

젠킨스 컨테이너 실행 명령어

  • --name
    • 컨테이너 이름 지정
  • -p
    • 포트설정
    • 애플리케이션이 동일하게 8080을 사용한다면 수정해줘야함
  • --restart=on-failure
    • 컨테이너가 비정상 종료된 경우 자동으로 다시 시작하도록 설정
  • -v jenkins_home:/var/jenkins_home
    • /var/jenkins_home 경로에 Jenkins의 모든 데이터를 볼륨으로 저장, 이 볼륨으로 컨테이너 재실행 가능
  • -v /var/run/docker.sock:/var/run/docker.sock
    • Docker-in-Docker 방식으로 컨테이너 내부에서 다른 Docker 작업을 실행하기 위해 소켓 설정
docker ps -a

명령어를 입력해 docker에서 실행중인 컨테이너를 확인할 수 있다

 

정상 실행 되었다!

 

Jenkins에 Docker 설치, Docker in Docker

우선 jenkins bash에 접속한다

 

docker exec -it jenkins /bin/bash

jenkins 자리에는 지정한 컨테이너 이름이나

위 사진에 CONTANER_ID에 있는 값을 넣어주면 된다

 

jenkins 컨테이너의 root 계정 bash로 잘 접속되었다

 

apt-get remove docker docker-engine docker.io containerd runc

기존에 설치된 Docker 및 관련 패키지들을 제거

설치된게 없다면 그냥 에러가 납니다 상관없으니 패스

apt-get update

패키지 목록을 업데이트

apt-get install ca-certificates curl gnupg lsb-release

Docker 저장소 추가를 위해 필요한 필수 패키지 설치

mkdir -p /etc/apt/keyrings

Docker의 GPG 키를 저장할 디렉토리를 생성

curl -fsSL https://download.docker.com/linux/debian/gpg -o /tmp/docker.gpg

Docker의 공식 GPG 키를 /tmp/docker.gpg에 다운로드

sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg /tmp/docker.gpg/etc/apt/keyrings/docker.gpg

/tmp/docker.gpg 파일을 /etc/apt/keyrings/docker.gpg로 변환하여 저장

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker의 공식 저장소를 apt 소스 목록에 추가

apt-get update

새로 추가한 Docker 저장소의 패키지 정보를 업데이트

apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Docker 엔진과 관련된 필수 패키지들 설치

 

이렇게하면 !! Docker in Docker 설치까지 완료!

이제 Jenkins에 접근하여 프로젝트를 배포해봅시다!!

 

 

참고 자료

https://moon1z10.github.io/development/AWS-Ubuntu-Docker-Installation/

https://programmingiraffe.tistory.com/116

감사합니다