일반적으로 배포(Deployment)라고 하면, 인터넷에서 서비스를 사용할 수 있도록 하는 과정이라고 생각할 수 있는데,
개발자 입장에서 보면 배포할 대상이 코드뿐만 아니라 실행 환경도 포함된다.
배포(Deployment)의 의미
배포는 단순히 코드를 올리는 것이 아니라,
서비스가 실행될 수 있도록 필요한 모든 것을 준비하고 운영 환경에 올리는 과정을 의미한다.
배포하는 대상은 크게 두 가지로 볼 수 있다.
- 애플리케이션 코드 (예: 웹 서비스, API 서버 등)
- 실행 환경 (예: 웹 서버, 데이터베이스, 백엔드 서비스 등)
도커와 쿠버네티스가 "배포 도구"인 이유
1. 도커의 배포 개념
도커는 애플리케이션을 컨테이너라는 독립적인 환경에 패키징하고 실행할 수 있도록 만들어준다.
- 개발 환경과 운영 환경의 차이를 줄이고, 어디서든 동일하게 실행 가능
- 도커 컨테이너를 실행하는 것 자체가 배포의 일부가 됨
즉, 도커를 사용하면 “내 애플리케이션을 실행할 준비가 된 상태”를 배포하는 것이다.
2. 쿠버네티스의 배포 개념
쿠버네티스는 도커 컨테이너를 관리하면서, 배포를 더 확장된 개념으로 다룬다.
- 여러 개의 컨테이너를 한꺼번에 배포
- 특정 개수의 컨테이너가 항상 실행되도록 유지
- 트래픽을 자동으로 분산
즉, 쿠버네티스를 사용하면 "내 애플리케이션이 여러 개의 서버에서 안정적으로 실행될 수 있도록 배포하는 것"을 의미한다.
"배포 도구"라고 하는 이유
결국 배포 도구라는 말은 "애플리케이션을 실행할 준비가 된 상태로 만드는 과정"을 도와주는 도구라는 뜻이다.
- 도커는 컨테이너로 애플리케이션을 배포하는 도구
- 쿠버네티스는 컨테이너를 여러 개 관리하고 안정적으로 배포하는 도구
실제 서비스 배포 과정에서는
- 코드를 GitHub/GitLab에 올리고 (CI/CD)
- 도커 컨테이너를 빌드하고 (이미지 생성)
- 쿠버네티스를 이용해 실행 환경을 구성하고 (오케스트레이션)
- 최종적으로 인터넷에서 사용할 수 있도록 설정한다.
그래서 도커도, 쿠버네티스도 각각 배포와 관련된 역할을 하기 때문에 "배포 도구"라고 불리는 것이다.
- 코드를 GitHub/GitLab에 올리고 (CI/CD) 부분에 대해 조금 더 설명을 하자면,
도커 이미지(Docker Image)는 GitHub/GitLab에 올린 코드로 만드는 것이다.
도커 이미지(Docker Image)란?
도커 이미지는 애플리케이션 코드 + 실행 환경을 패키징한 파일.
운영체제, 라이브러리, 실행 파일 등이 포함되어 있어서, 어디서든 같은 환경에서 실행할 수 있다.
예를 들어, Node.js 웹 서버를 실행한다고 하면?
- GitHub/GitLab에 있는 코드(Node.js 앱)를 가져와서
- Dockerfile을 이용해 이미지를 빌드하고
- 컨테이너로 실행.
실제 서비스 배포 과정에서 이미지 생성
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 같은 레지스트리에 저장한다.
- 쿠버네티스가 이 이미지를 가져와 컨테이너로 실행한다.
즉, 도커 이미지는 코드의 실행 환경까지 포함된 배포 가능한 패키지라고 보면 된다.
'클라우드 > 쿠버네티스' 카테고리의 다른 글
EC2와 쿠버네티스는 어떻게 연결돼서 사용될까? (0) | 2025.03.12 |
---|