Docker는 컨테이너화 기술을 제공하며, 애플리케이션과 그 실생 환경을 패키징하고 배포할 수 있게 해준다. 이를 통해 일관된 실행 환경과 빠른 배포 및 확장 등이 가능하다.
Docker 사용 이유
과거 소프트웨어 개발 주기: 폭포수 모형
과거에는 소프트웨어 개발 주기에서 폭포수 모형을 사용했다. 이 방식은 개발 과정의 한 단계가 끝나야 다음 단계로 넘어갈 수 있는 구조이다. 하지만 다음과 같은 문제점이 있었다:
- 문제가 발생하면 이전 단계로 돌아가는 데 많은 시간과 비용이 소요된다.
- 과정이 병행 수행되지 않아 비효율적이다.
- 배포 후 문제가 발생하면 롤백과 수정을 반복해야 하며, 여러 서버에 수동으로 하나하나 배포해야 했다.
현대 소프트웨어 개발 주기: 애자일 모형
현재는 애자일 모형을 주로 사용한다. 이 방식은 개발 → 설계 → 테스트의 짧은 주기를 반복하면서 지속적으로 업데이트하고 개선하는 방법이다.
- 장점 : 변화에 빠르게 대응할 수 있다.
- 단점: 여전히 배포와 테스트에 시간과 리소스가 소요될 수 있다.
Docker를 사용한다면
- 서버 환경 표준화: 같은 환경에서 배포 및 테스트를 진행할 수 있다.
- 자동화된 배포와 테스트: CI/CD 파이프라인과 통합하여 자동화된 배포 및 테스트가 가능하다.
- 리소스 효율성: 가상 머신보다 가볍고 빠르게 실행되며, 서버 리소스를 절약할 수 있다.
- 확장성: 필요에 따라 여러 컨테이너를 수평 확장하여 애플리케이션 성능을 높일 수 있다.
Docker 구성 요소
1. Docker Image
Docker 이미지는 컨테이너를 생성하기 위한 템플릿으로, 애플리케이션 실행에 필요한 라이브러리, 설치 값, 설정 정보 등을 포함하고 있다.
docker build -t myapp:latest .
위 명령어를 상용해 myapp:latest 라는 이름의 Docker 이미지를 생성한다.
2. Docker Container
Docker 컨테이너는 이미지를 실행한 상태이며, 격리된 환경에서 애플리케이션이 동작하는 단위이다. 하나의 이미지로 여러 개의 컨테이너를 실행할 수 있다.
docker run -d --name mycontainer myapp:latest
위 명령어를 통해 myapp:latest 이미지를 기반으로 mycontainer라는 컨테이너를 실행한다.
3. Docker Compose
Docker Compose는 여러 개의 컨테이너를 동시에 실행하고 관리할 수 있게 해주는 도구이다. docker-compose.yml 파일에 설정을 정의하고 실행한다.
- docker-compose.yml 파일
version: '3.8'
services:
backend:
image: backend:latest
volumes:
- ./backend:/app
ports:
- "8000:8000"
frontend:
image: frontend:latest
volumes:
- ./frontend:/app
ports:
- "80:3000"
- 실행 명령어
docker-compose up -d
위 명령어로 backend와 forntend 컨테이너가 동시에 실행된다.
마무리
Docker를 사용하면 서버 환경 표준화, 자동화된 배포, 리소스 효율성, 화작성을 높있 수 있다. 이를 통해 개발 과정에서 발생하는 문제점을 해결하고 손쉽게 배포, 관리할 수 있다.