Docker 개요

이건우·2025년 3월 5일

웹 프로그래밍

목록 보기
15/43

Docker는 컨테이너 기반의 가상화 기술을 제공하는 오픈소스 플랫폼이다.
애플리케이션을 컨테이너라는 단위로 패키징하고 배포, 실행할 수 있도록 돕는다.

Docker 핵심 요소

1. 컨테이너(Container)

애플리케이션과 실행에 필요한 모든 라이브러리, 종속성을 하나의 단위로 패키징한 것
격리된 환경에서 실행되며, OS에 독립적으로 동작함
기존의 가상 머신(VM)보다 가볍고, 실행 속도가 빠름

2. 이미지(Image)

컨테이너를 실행하기 위한 템플릿 (즉, 컨테이너의 "설계도")
애플리케이션과 그 실행 환경이 포함
변경이 불가능한(Immutable) 상태로 저장되며, 이를 기반으로 컨테이너가 실행됨

3. Dockerfile

Docker 이미지생성하기 위한 설정 파일
애플리케이션 빌드 과정과 환경코드로 정의할 수 있음

4. Docker Compose

여러 개의 컨테이너한 번에 관리할 수 있도록 돕는 도구
docker-compose.yml 파일을 사용하여 여러 컨테이너를 정의할 수 있음

5. Docker Hub

Docker 이미지를 공유하고 관리하는 공식 저장소
docker pull [이미지명] 명령어를 통해 쉽게 가져올 수 있음


사용 이점

1. 개발 환경의 일관성 유지

어플리케이션이 Docker 위에서 구동되기 때문에, 모든 개발자가 동일한 환경에서 개발 가능
-> 개발환경 달라서 문제가 생길 가능성이 현저히 줄어듦

++
Dockerfile과 docker-compose.yml을 활용하여 한 번 정의한 환경을 로컬, 테스트 서버,
운영 서버에서 동일하게 유지 가능
팀 내에서 환경 설정을 공유하고 빠르게 셋업 가능

2. 빠른 배포 및 확장성

아래와 같은 특징으로 개발환경을 한번 구축하고 나면
결과물을 빠르게 배포 및 확장 할 수 있음

  • 이미지를 한 번 빌드하면 어디서든 동일한 환경에서 실행 가능
  • docker run 한 줄이면 컨테이너 실행 가능
  • Kubernetes와 함께 사용하면 컨테이너를 수천 개까지 자동 확장 가능

3. 경량 환경 (리소스 절약)

기존의 가상 머신(VM)은 하나의 애플리케이션을 실행하려면 OS까지 포함된 무거운 이미지를 사용해야 하기에 메모리와 CPU를 많이 차지하며, 실행 속도도 느림

  • Docker 사용시:
    컨테이너는 OS 커널을 공유하므로 VM보다 가볍다.
    하나의 서버에서 더 많은 애플리케이션을 실행할 수 있다.
    시작 속도가 VM보다 훨씬 빠르다.
    ex)
    VM 방식: 10개 애플리케이션 실행 시 10개의 OS가 필요 -> 리소스 많이 사용
    Docker 방식: 10개 애플리케이션 실행 시 1개의 OS 공유 -> 리소스 절약

4. DevOps 및 CI/CD 최적화

기존 배포 방식은 코드 변경 → 빌드 → 서버 설정 → 배포의 과정이
복잡하고 시간이 오래 걸려 지속적인 통합과 배포를 자동화하기 어렵다.

  • Docker 사용시:
    CI/CD 파이프라인에서 빌드와 배포를 자동화 가능
    GitHub Actions, Jenkins, GitLab CI/CD 등과 쉽게 연동 가능

5. 멀티 플랫폼 지원 (개발과 운영 환경 차이 해결)

예시로, 개발자는 macOS, 운영 서버는 Linux, 다른 팀원은 Windows 등 환경이 다를 경우 실행 방식이 다를 수 있기에, 특정 OS에서만 동작하는 소프트웨어가 있을 경우
개발과 운영 환경을 맞추기가 어렵다.

  • Docker 사용시:
    컨테이너 내부 환경이 어디서든 동일하므로 OS 차이로 인한 문제 해결
    Windows에서도 WSL2를 활용해 Linux 기반 컨테이너 실행 가능

6. 마이크로서비스 아키텍처에 최적화

하나의 거대한 애플리케이션(모놀리식 구조)은 유지보수가 어렵고 배포 속도가 느리다.
특정 기능만 업데이트하려 해도 전체 애플리케이션을 재배포해야 하기 때문.

  • Docker 사용시:
    각 기능을 별도의 컨테이너로 분리하여 실행 가능
    필요할 때만 특정 기능을 업데이트하거나 확장 가능

마치며..

Docker는 한번 환경을 구현해 놓으면 그 이후가 매우 편리해 집니다.
Docker를 쓰지 말아야 할 특정한 이유가 없는 것이 아니라면
사용 해 보는 것을 추천합니다.

profile
새싹개발자

0개의 댓글