백엔드 개발자 쿠버네티스 시리즈 (1) - docker
최근에 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 서비스에서 해당 이미지를 이용할 수 있습니다.