🔥스파르타 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를 사용하는 방법에 대해 알아보자 🖐️🖐️