개발/infra

[infra/terraform] 도커가 뭘까?

2ivii 2025. 11. 19. 11:00

오랜만에 포스팅을 시작한다! 클라우드 배포를 하다 보면 “도커 이미지”, “컨테이너”, “ECR”, “ECS” 이런 단어들이 계속 등장한다. 그런데 처음엔 이게 뭔지 감이 잘 안 잡힌다.. 어디선가 들어봤지만 제대로 뭘 하는지는 잘 모른다.

나도 백엔드 배포하면서 ‘도커가 어떻게 돌아가고 ec2는 뭐하는애지?’ 라는 궁금증이 많아서 이번에 제대로 정리해봤다.


도커란?

도커는 “앱 + 실행환경을 하나로 묶어서 어디서든 똑같이 실행되게 만드는 기술”이다. 즉 도커는 개발환경과 서버와 간극을 없애주는 친구인 것이다.

예전 방식(도커 없던 시절)
  • 개발환경은 Java 17
  • 서버는 Java 8
  • 서버 A는 잘 되는데 서버 B는 라이브러리 충돌
  • 운영환경에 올리면 갑자기 오류 발생
도커 방식
  • 실행환경을 아예 이미지 안에 포함
  • 이미지 안에 Java 버전, 라이브러리, 설정까지 통째로 묶음
  • 어디에 올려도 똑같이 동작

→ 서버랑 개발환경이 달라도 문제 없음
→ 재현성 100%
→ 배포가 안정적

 

도커 이미지란?

도커 이미지 = 실행 가능한 앱 전체를 담아놓은 “스냅샷 템플릿”

 

그 안에는:

  • Spring Boot jar 파일
  • JRE(자바 실행환경)
  • 리눅스 기본 파일들
  • application.yml
  • 앱이 실행되기 위해 필요한 설정들

모두 포함되어 있다.

즉, 이미지는 “읽기 전용” 템플릿이다.

 

컨테이너란?

이미지 = 설계도, 템플릿
컨테이너 = 실제 실행 중인 상태

 

비유하면:

  • 이미지 = 게임 설치폴더
  • 컨테이너 = 지금 플레이 중인 게임

컨테이너는 이미지 위에 얹혀진 “실행 중 계층”이 있어서
실행할 때만 파일이 만들어지거나 변경된다.


 

도커 -> 이미지 -> 컨테이너 실행 과정

보통 도커 이미지는 Dockerfile이라는 파일에서 생성된다.

예를 들어 스프링 부트 Dockerfile은 이런 형태:

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY app.jar app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

여기 있는 내용은 이렇게 읽으면 된다:

  1. 자바 실행 가능한 베이스 이미지 하나 받음
  2. /app 디렉토리에서 실행
  3. 내가 만든 app.jar 복사
  4. 컨테이너가 뜰 때 java -jar app.jar 실행

이걸 docker build 하면 하나의 도커 이미지가 된다.


 

도커를 써야하는 이유!

  1. 실행 환경 통일성
  2. 서버에 Java, Python, Node 이런거 설치할 필요가 없다
  3. 배포 스피드가 빠르다
  4. aws와 같은 클라우드 서비스와 잘 맞는다
  5. 확장성과 장애 복구가 쉽다

우선 실행환경이 통일되어있으니 어디서 돌리든 같은 결과를 보여준다. 환경이 다르다해서 실행 안되고 이런 일이 없는 것이다. 또한 도커 이미지에 들어있으니까, 서버에 java이런걸 설치할 필요도 없고, 이미지를 pull해서 실행하면 끝이니 스피드도 빠르다. 요즘 클라우드가 거의 컨테이너 중심으로 돌아가기도 하고, 컨테이너 하나 죽어도 같은 이미지로 바로 새 컨테이너 생성도 가능하기에 확장성과 장애 복구가 쉽다.

 

도커 없는 옛날 방식:

  1. EC2에 Java 설치
  2. EC2에 앱 jar 복사
  3. EC2에서 java -jar app.jar
  4. 서버마다 다른 환경이라 문제 발생
  5. 로그, 포트, 패키지 충돌 등 문제 발생
  6. 재배포 시 jar 교체해야 하고 프로세스 재시작 필요

도커 방식:

  1. 이미지만 새로 만듦
  2. ECS/Fargate가 이미지 pull
  3. 컨테이너 자동 실행
  4. 동일한 환경에서 실행되니까 문제 없음

마무리

이번 포스팅에서는 도커에 대해 간단히 다뤄봤다. 간략히 말해보면, 도커는 환경을 맞춰야되는 번거로움을 없애고 앱 자체를 박스 안에 넣어서 배송하는 것이다! 다음 포스팅에는 클라우드 서비스에 대해 조금 더 알아보겠다.