https://everyday-spring.com/630
https://everyday-spring.com/631
지난 글에서 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
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
감사합니다