클라우드/쿠버네티스

도커/쿠버네티스가 배포 도구인 이유

study_memo 2025. 3. 10. 23:24

일반적으로 배포(Deployment)라고 하면, 인터넷에서 서비스를 사용할 수 있도록 하는 과정이라고 생각할 수 있는데, 
개발자 입장에서 보면 배포할 대상이 코드뿐만 아니라 실행 환경도 포함된다.

 

배포(Deployment)의 의미

배포는 단순히 코드를 올리는 것이 아니라,
서비스가 실행될 수 있도록 필요한 모든 것을 준비하고 운영 환경에 올리는 과정을 의미한다.

배포하는 대상은 크게 두 가지로 볼 수 있다.

  1. 애플리케이션 코드 (예: 웹 서비스, API 서버 등)
  2. 실행 환경 (예: 웹 서버, 데이터베이스, 백엔드 서비스 등)

도커와 쿠버네티스가 "배포 도구"인 이유

1. 도커의 배포 개념

도커는 애플리케이션을 컨테이너라는 독립적인 환경에 패키징하고 실행할 수 있도록 만들어준다.

  • 개발 환경과 운영 환경의 차이를 줄이고, 어디서든 동일하게 실행 가능
  • 도커 컨테이너를 실행하는 것 자체가 배포의 일부가 됨

즉, 도커를 사용하면 “내 애플리케이션을 실행할 준비가 된 상태”를 배포하는 것이다.

2. 쿠버네티스의 배포 개념

쿠버네티스는 도커 컨테이너를 관리하면서, 배포를 더 확장된 개념으로 다룬다.

  • 여러 개의 컨테이너를 한꺼번에 배포
  • 특정 개수의 컨테이너가 항상 실행되도록 유지
  • 트래픽을 자동으로 분산

즉, 쿠버네티스를 사용하면 "내 애플리케이션이 여러 개의 서버에서 안정적으로 실행될 수 있도록 배포하는 것"을 의미한다.


"배포 도구"라고 하는 이유

결국 배포 도구라는 말은 "애플리케이션을 실행할 준비가 된 상태로 만드는 과정"을 도와주는 도구라는 뜻이다.

  • 도커는 컨테이너로 애플리케이션을 배포하는 도구
  • 쿠버네티스는 컨테이너를 여러 개 관리하고 안정적으로 배포하는 도구

실제 서비스 배포 과정에서는
- 코드를 GitHub/GitLab에 올리고 (CI/CD)
- 도커 컨테이너를 빌드하고 (이미지 생성)
- 쿠버네티스를 이용해 실행 환경을 구성하고 (오케스트레이션)
- 최종적으로 인터넷에서 사용할 수 있도록 설정한다.

그래서 도커도, 쿠버네티스도 각각 배포와 관련된 역할을 하기 때문에 "배포 도구"라고 불리는 것이다.


- 코드를 GitHub/GitLab에 올리고 (CI/CD) 부분에 대해 조금 더 설명을 하자면, 

 

도커 이미지(Docker Image)는 GitHub/GitLab에 올린 코드로 만드는 것이다. 

 

도커 이미지(Docker Image)란?

도커 이미지는 애플리케이션 코드 + 실행 환경을 패키징한 파일.
운영체제, 라이브러리, 실행 파일 등이 포함되어 있어서, 어디서든 같은 환경에서 실행할 수 있다.

 

예를 들어, Node.js 웹 서버를 실행한다고 하면?

  1. GitHub/GitLab에 있는 코드(Node.js 앱)를 가져와서
  2. Dockerfile을 이용해 이미지를 빌드하고
  3. 컨테이너로 실행.

실제 서비스 배포 과정에서 이미지 생성

1. 코드를 GitHub/GitLab에 올림

  • 개발한 애플리케이션을 GitHub/GitLab에 푸시(push)
  • CI/CD 도구(GitHub Actions, GitLab CI/CD 등)가 감지

2. 도커 이미지 빌드

  • Dockerfile을 사용해서 코드와 실행 환경을 포함한 도커 이미지를 생성
  • 예시
    <dockerfile>
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "server.js"]
  • docker build -t my-app:latest . 명령어로 이미지 빌드
  • 빌드된 이미지를 Docker Hub 또는 GitHub Container Registry(GHCR) 등에 저장

 

3. 쿠버네티스에서 실행

  • 쿠버네티스가 Docker Hub 또는 GHCR에서 이미지를 가져와 컨테이너 실행
  • 예시
    <deployment.yaml>
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-dockerhub-id/my-app:latest
          ports:
            - containerPort: 80

 

 

4. 서비스를 외부에서 접근 가능하게 설정

  • Service 객체를 이용해 인터넷에서 접속할 수 있도록 설정
  • 트래픽을 여러 컨테이너에 분산하는 로드밸런서 역할 수행

정리

- 이미지는 GitHub/GitLab에 올린 코드로 만든다.
- 빌드한 이미지는 Docker Hub, GHCR, AWS ECR 같은 레지스트리에 저장한다.
- 쿠버네티스가 이 이미지를 가져와 컨테이너로 실행한다.

즉, 도커 이미지는 코드의 실행 환경까지 포함된 배포 가능한 패키지라고 보면 된다.