🔥스파르타 TIL (Docker)

CI/CD와 Docker 란?

승승장규 2025. 2. 10. 14:13

CI (Continuous Integration) : 지속적 통합 ▼

  • 모든 개발자들이 작성한 코드를 정기적으로 통합하는 것을 말한다.
  • 코드 통합 시 발생할 수 있는 충돌을 신속하게 발견하고, 테스트 자동화를 통해 버그를 초기에 발견해서 해결한다.
  • 코드를 commit 하면 CI서버가 이를 감지한다 → CI서버는 빌드 및 자동화된 테스트를 실행한다 → 테스트를 통과하지 못하면 알림이 전달된다.

CD (Continous Deployment) : 지속적 제공 ▼

  • CI 이후의 단계로, 코드 변경 사항이 테스트를 통과한 후 자동으로 배포되는 것이다.
  • 사용자에게 새로운 기능과 버그 수정을 신속하게 제공한다.
  • 배포를 자동화하여 수동 작업에서 발생할 수 있는 오류를 줄이고, 개발과 배포의 일관성을 유지한다.
  • 테스트를 통과한 코드 변경 사항을 자동으로 배포한다 → 배포 후에도 지속적인 모니터링을 통해 문제에 대응한다.

 

 

Docker VS Jenkins ▼

항목 Docker Jenkins
정의 애플리케이션을 컨테이너화하여 실행 환경을 일관되게 유지하는 도구 CI/CD 파이프라인을 자동화하여 코드 통합 및 배포를 지원하는 도구
주된 목적 애플리케이션 배포 및 이식성 개선 코드 빌드, 테스트, 배포 자동화
사용 방법 Dockerfile을 작성하여 이미지를 빌드하고 컨테이너로 실행 파이프라인 설정 파일(Jenkinsfile) 작성, 빌드 서버에서 실행
가상화 방식 운영체제 수준의 가상화 (컨테이너) 가상화 방식에 의존하지 않음
주요 기능 컨테이너 생성, 이미지 빌드, 레지스트리 관리 빌드 트리거, 파이프라인 설정, 플러그인 지원
주요 사용 사례 클라우드 배포, 마이크로서비스 아키텍처, 개발 환경 통일 CI/CD 자동화, 테스트 자동화, 배포 자동화
스케일링 Docker Swarm, Kubernetes 등을 통해 컨테이너 오케스트레이션 Jenkins 서버 클러스터링, 분산 빌드 가능
플러그인 및 확장성 Docker 자체는 플러그인이 없지만, 다양한 도구와의 통합 지원 수천 개의 플러그인 제공, 다양한 도구와 통합 가능
유지보수 비교적 쉬움 복잡한 설정과 플러그인 관리 필요
학습 곡선 중간 (Dockerfile 및 명령어 학습 필요) 비교적 높음 (다양한 설정 및 플러그인 학습 필요)

 

 

 

Docker의 주요 개념 ▼

  • 이미지 (Image) : 애플리케이션과 필요한 모든 구성 요소를 포함한 읽기 전용 템플릿으로 운영 체제, 애플리케이션, 라이브러리 등을 포함할 수 있다
  • 컨테이너 (Container) :  이미지를 실행한 것으로, 애플리케이션을 실행하는 격리된 환경이다. 필요한 모든 파일을 포함하고 있어 어디서나 일관된 방식으로 실행될 수 있다. 가상 머신과 유사하지만, 호스트 운영 체제의 커널을 공유한다.
  • Dockerfile : 이미지를 빌드하는 데 사용되는 텍스트 파일로, 이미지의 설정 정보를 정의한다. Dockerfile 기반으로 이미지를 빌드하면 일관된 배포를 할 수 있다.
  • 레지스트리 (Registry) : Docker의 이미지를 저장하고 배포하는 중앙 저장소로, 가장 많이 사용되는 공용 레지스트리는 Docker Hub이다.

 

 

Docker 사용하기 ▼ Windows 11

 

※ WSL2 (Windows Subsystem for Linux version 2) : Windows에서 Linux를 실행할 수 있는 기능으로 Windwos에서 Linux 배포판(Ubuntu, Debian, Kali 등)을 설치하고, Linux 명령줄 도구와 애플리케이션을 실행할 수 있다.

 

제어판 ▶ 프로그램 및 기능 ▶ Windows 기능 켜기/끄기 ▶ Linux용 Windows 하위 시스템 체크 확인

 

 

 

 

터미널 관리자 권한으로 실행 ▼

wsl --install

wsl --update

# DISM 도구를 사용하여 Virtual Machine Platform 기능을 활성화해서 가상화 기능을 제공. 
dism.exe /online /enable-featurename:VirtualMachinePlatform /all /norestart

# 리눅스 배포판의 정보를 출력
lsb_release -a

 

Ubuntu가 설치되었다면 Docker를 설치해 보자 ▼  Ubuntu 터미널을 실행한다.

# docker engine gpg 키 등록
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# apt source 에 docker 관련 추가
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# docker engine 설치
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin docker-compose

# docker 그룹에 현재 계정을 등록하여 sudo 없이 docker 명령을 사용하게 함
sudo usermod -aG docker user
sudo service docker restart

# docker version 확인
docker --version

# docker compose version 확인
docker-compose --version

 

 

 

 

이후에 docker를 사용하는 방법에 대해 알아보자 🖐️🖐️