인프라

백엔드 개발자 쿠버네티스 시리즈 (1) - docker

이째형 2024. 10. 25. 14:02

최근에 eks를 사용하는 사이드 프로젝트에 참여하게 되어서, 

항상 궁금했던 쿠버네티스에 대해서 학습해보며 내용을 정리해보려 합니다.

스터디시에도 공유할 내용이라 조금 옆으로 새더라도 감안하면서 봐주세용!

 

docker-compose

쿠버네티스에 대해서 학습하려면, 반드시 알아야하는 개념이 컨테이너입니다.

개발 공부에 있어서 가장 좋은 방법은 직접 해보면서 배우는 거라고 생각하는데, 

백엔드 개발을 하면서 가장 간단하게 도커를 적용해 볼 수 있는 부분이 도커 컴포즈라고 생각해서 도커 컴포즈부터 알아보겠습니다.

 

일단 도커 컴포즈가 뭔지부터 알아야겠죠?

 

도커 컴포즈를 적용해보는 방법은 간단합니다.

프로젝트 최상단에 docker-compose.yml 파일을 추가하고 

version: '3'
services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_DB: diary_local
      POSTGRES_USER: diary_local
      POSTGRES_PASSWORD: diary_local
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:alpine
    command: redis-server --port 6379
    labels:
      - "name=redis"
      - "mode=standalone"
    ports:
      - 6379:6379

volumes:
  postgres_data:

docker-compose up 커맨드를 실행하면 로컬에 따로 레디스 / postgres등을 설치 없이 실행해볼 수 있습니다.

nginx / kafka / mysql 등등.. 다양한 어플리케이션들을 컨테이너로 띄울 수 있습니다.

 

- 기본 명령어

docker-compose up: docker-compose.yml에 정의된 모든 서비스를 실행
docker-compose down: 실행 중인 모든 서비스를 중지하고 네트워크 등을 정리
docker-compose ps: 현재 실행 중인 서비스의 상태를 확인

 

 

DockerFile

도커를 처음 배우시는 분들이라면, 

"어디서든 손쉽게 다운로드하고 동일한 환경에서 애플리케이션을 실행할 수 있다"

라는 도커의 장점에 대해서 한번쯤 들어보셨을 것이라고 생각합니다.

 

스프링 부트 앱을 Jar파일로 만들어 aws ec2에 직접 올릴경우, jdk 설정이 ec2에 되어있지 않다면 어플리케이션을 실행할 수 없습니다.

 

하지만 도커를 사용할 경우 Docker는 컨테이너 내부에 독립된 파일 시스템을 갖춘 환경을 만들어줍니다.

Spring 애플리케이션을 빌드한 Docker 이미지에 JDK와 필요한 모든 라이브러리, 종속성을 포함할 수 있습니다.

이를 통해 Docker는 호스트 시스템과 무관하게 애플리케이션이 실행되는 환경을 설정할 수 있게 해줍니다.

 

도커파일은 도커 이미지를 만들기 위한 스크립트 파일입니다. (아래 코드는 챗지피티 참조)

# 1. 베이스 이미지 설정
FROM python:3.8

# 2. 컨테이너 내부 작업 디렉토리 설정
WORKDIR /app

# 3. 소스 코드 복사
COPY . /app

# 4. 종속성 설치
RUN pip install -r requirements.txt

# 5. 컨테이너 실행 명령 설정
CMD ["python", "app.py"]

 

 

 

사용 예시

깃허브 액션을 이용하면, workflow.yml 을 통해서 타겟 브랜치에 어떠한 이벤트가 발생할 경우 

어떤 플로우를 진행시킬지를 설정할 수 있습니다.

이를 통해서 워크플로우에서 도커파일 스크립트를 실행시켜서 

aws에서 제공하는 ecr이라는 도커 이미지 저장소에 이미지를 업로드 할 수 있고,

ecs / eks등의 aws 서비스에서 해당 이미지를 이용할 수 있습니다.