도커

도커란? - 이미지, 컨테이너, 도커 컴포즈까지

taehyuck 2026. 1. 3. 19:34
728x90

도커(Docker)란 무엇인가

도커는 프로그램을 어디서든 똑같이 실행할 수 있게 해주는 도구입니다.

개발을 하다 보면 이런 상황을 자주 겪습니다.

내 컴퓨터에서는 잘 돌아가는데,
다른 사람 컴퓨터나 서버에서는 에러가 난다.

이유는 간단합니다.

  • 운영체제(OS)가 다르고
  • 라이브러리 버전이 다르고
  • 실행 환경 설정이 다르기 때문입니다.

도커는 이런 문제를 해결하기 위해 등장했습니다.

실행 환경 자체를 하나로 묶어서 어디서든 동일하게 실행할 수 있게 해줍니다.


도커의 핵심 개념

도커를 이해하려면 아래 세 가지만 알면 됩니다.

  1. 이미지(Image)
  2. 컨테이너(Container)
  3. Docker Compose

1. 이미지(Image)란?

이미지는 프로그램을 실행하기 위한 설계도입니다.

이미지 안에는 다음이 들어 있습니다.

  • 운영체제 환경
  • 필요한 라이브러리
  • 프로그램 코드
  • 실행 명령어

이미지는 실행되지 않습니다.
실행되기 위한 모든 준비가 되어 있는 상태일 뿐입니다.

비유하자면,
이미지는 예전 닌텐도 게임 칩과 같습니다.

  • 칩 자체는 가만히 있음
  • 기기에 꽂아야 게임이 실행됨

2. 컨테이너(Container)란?

컨테이너는 이미지를 실제로 실행한 상태입니다.

이미지를 실행하면 컨테이너가 만들어집니다.

  • 하나의 컴퓨터 안에서 동작하는 독립된 실행 공간
  • 여러 개의 컨테이너를 동시에 실행 가능
  • 각 컨테이너는 서로 영향을 주지 않음

그래서 컨테이너 하나를
하나의 프로젝트 또는 하나의 서비스 전용 공간으로 사용할 수 있습니다.

즉,

이미지를 실행한 결과가 컨테이너다

라고 이해하면 됩니다.


실제 프로젝트 예시

하나의 프로젝트에 다음 기술들이 있다고 가정해봅시다.

  • Next.js (프론트엔드)
  • Spring Boot (백엔드)
  • Redis (캐시, 세션 저장소)

이때 자주 하는 오해가 있습니다.

"이걸 하나의 이미지로 묶어야 하나?"

정답은 아닙니다.


❌ 하나의 이미지로 묶지 않는 이유

만약 Next.js, Spring Boot, Redis를
하나의 이미지로 묶어버리면 다음 문제가 생깁니다.

  • 프론트만 수정해도 전체 이미지를 다시 빌드해야 함
  • 하나가 죽으면 전부 같이 영향 받음
  • 서비스 확장(Scale)이 어려움
  • 실무 구조와 완전히 다름

그래서 실무에서는 절대 이렇게 구성하지 않습니다.


✅ 올바른 도커 구성 방식

서비스 하나당 이미지 하나를 사용합니다.

Next.js      → nextjs 이미지  → nextjs 컨테이너
Spring Boot  → spring 이미지  → spring 컨테이너
Redis        → redis 이미지   → redis 컨테이너

각 서비스는 완전히 독립된 컨테이너로 실행됩니다.


3. Docker Compose란?

Docker Compose는
여러 컨테이너를 하나의 프로젝트처럼 묶어서 관리하는 도구입니다.

Docker Compose가 하는 일은 다음과 같습니다.

  • 여러 컨테이너를 한 번에 실행
  • 컨테이너 간 네트워크 연결
  • 실행 순서 관리
  • 환경 변수, 포트 설정 관리

즉,

각각의 컨테이너를 연결하고 동시에 관리해주는 도구

라고 이해하면 됩니다.


개념을 한 번에 정리

초등학생도 이해할 수 있게 비유하면 이렇습니다.

  • 이미지: 레고 설명서
  • 컨테이너: 설명서대로 만든 레고 작품
  • Docker Compose: 여러 레고를 한 판 위에 올려서 연결해주는 판

한 줄 요약

  • 이미지: 실행 환경이 모두 들어 있는 설계도
  • 컨테이너: 이미지를 실행한 독립된 공간
  • Docker Compose: 여러 컨테이너를 하나의 프로젝트처럼 관리하는 도구

도커는
"내 컴퓨터에서는 됐는데요?"라는 말을
없애기 위해 만들어진 기술입니다.

728x90