안녕하세요 펭귄교수입니다.
서버리스(Serverless)는 현대 클라우드 컴퓨팅의 중요한 기술 중 하나입니다.
서버를 직접 관리하지 않고도 애플리케이션을 개발, 배포할 수 있다는 점에서 많은 개발자들에게 사랑받고 있습니다.
이번 포스팅에서는 도커(Docker)를 사용하여 서버리스 환경을 구축하는 방법에 대해 알아보겠습니다. 도커가 제공하는 유연성과 서버리스 아키텍처의 장점을 결합하여, 더 효율적이고 확장 가능한 시스템을 만들 수 있습니다.
1. 서버리스란?
서버리스(Serverless)는 개발자가 서버를 직접 관리하지 않고, 클라우드 제공 업체가 관리하는 서버에서 애플리케이션을 실행할 수 있도록 하는 컴퓨팅 모델입니다. 서버리스 환경에서는 인프라 관리의 복잡성을 줄이고, 개발자는 코드 작성과 애플리케이션 로직에만 집중할 수 있습니다.
서버리스 컴퓨팅의 핵심 특징은 다음과 같습니다.
- 자동 확장성: 트래픽 변화에 따라 자동으로 리소스가 할당됩니다.
- 비용 효율성: 사용한 만큼만 비용을 지불합니다.
- 빠른 배포: 인프라 설정이나 서버 구성이 필요 없습니다.
대표적인 서버리스 플랫폼으로는 AWS Lambda, Azure Functions, Google Cloud Functions 등이 있습니다. 도커를 사용하면 이러한 서버리스 기능을 로컬 환경에서도 구현할 수 있으며, 필요한 경우 클라우드로 쉽게 전환할 수 있습니다.
2. 도커와 서버리스
도커는 서버리스 컴퓨팅 모델과 잘 맞는 도구입니다. 도커 컨테이너는 경량화되어 있으며, 빠르게 시작되고, 리소스 소모도 적습니다. 이를 통해 도커로 서버리스 애플리케이션을 구동할 수 있습니다. 또한, 도커를 사용하면 애플리케이션을 로컬에서 개발하고 테스트한 후, 클라우드에 쉽게 배포할 수 있습니다.
도커로 서버리스 환경을 구축하는 방법:
- OpenFaaS와 같은 서버리스 프레임워크 사용
- AWS Lambda와 함께 도커 이미지 사용
- Knative 같은 클라우드 네이티브 서버리스 플랫폼 활용
이 포스팅에서는 OpenFaaS와 AWS Lambda를 이용한 도커 기반 서버리스 환경 구축에 대해 설명하겠습니다.
3. OpenFaaS로 서버리스 환경 구축
OpenFaaS는 도커와 Kubernetes에서 서버리스 애플리케이션을 쉽게 배포하고 관리할 수 있는 오픈소스 프레임워크입니다. OpenFaaS는 도커 컨테이너를 서버리스 함수로 실행할 수 있게 해주며, 간단한 설치와 확장이 가능합니다.
Home
Serverless Functions Made Simple with Kubernetes.
www.openfaas.com
3-1. OpenFaaS 설치
OpenFaaS를 로컬 환경에 설치하려면 먼저 도커와 쿠버네티스(Kubernetes)가 필요합니다. 그 후 다음 단계를 따릅니다:
- 쿠버네티스 클러스터 설정: 쿠버네티스 클러스터를 설정하여 OpenFaaS를 배포할 준비를 합니다.
- faas-cli 설치: OpenFaaS의 CLI 도구인 faas-cli를 설치합니다.
# faas-cli 설치
curl -sSL <https://cli.openfaas.com> | sudo sh
- OpenFaaS 배포: OpenFaaS를 쿠버네티스 클러스터에 배포합니다.
# OpenFaaS 배포
kubectl apply -f <https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml>
kubectl apply -f <https://raw.githubusercontent.com/openfaas/faas-netes/master/yaml/openfaas.yml>
3-2. OpenFaaS로 함수 작성
OpenFaaS를 설치한 후, 간단한 함수를 작성하여 서버리스 환경에서 실행할 수 있습니다.
# 새로운 함수 템플릿 생성
faas-cli new hello-world --lang dockerfile
# Dockerfile 수정
vi hello-world/Dockerfile
# 함수 빌드 및 배포
faas-cli build -f hello-world.yml
faas-cli push -f hello-world.yml
faas-cli deploy -f hello-world.yml
이렇게 하면 hello-world라는 서버리스 함수를 도커 이미지로 빌드하고, OpenFaaS를 통해 서버리스 환경에서 실행할 수 있습니다.
4. AWS Lambda와 도커 이미지
AWS Lambda는 서버리스 컴퓨팅의 대표적인 플랫폼입니다. 최근 AWS Lambda는 도커 이미지를 지원하기 시작했으며, 이를 통해 도커 컨테이너로 서버리스 애플리케이션을 구동할 수 있습니다.
클라우드 컴퓨팅 PaaS | Amazon Web Services
AWS Lambda를 사용하여 1만 8,000개 이상의 vCPU로 즉시 스케일 아웃하여 리소스 집약적이고 예측할 수 없는 수요를 충족하세요. 기타 서버리스 제품 및 서비스와 이벤트 트리거 모음을 사용하여 처리
aws.amazon.com
4-1. AWS Lambda 도커 이미지 구성
AWS Lambda에서 도커 이미지를 사용하려면 먼저 Lambda 함수로 사용할 도커 이미지를 준비해야 합니다. 이 이미지는 AWS가 제공하는 Lambda 런타임을 기반으로 빌드됩니다.
다음은 Python 애플리케이션을 포함한 도커 이미지 예시입니다.
FROM public.ecr.aws/lambda/python:3.8
# 애플리케이션 코드 복사
COPY app.py ${LAMBDA_TASK_ROOT}
# Lambda 실행 핸들러 설정
CMD ["app.lambda_handler"]
여기서 app.py 파일은 Lambda 핸들러 함수로 동작하는 코드를 포함해야 합니다.
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'Hello from Docker Lambda!'
}
4-2. 도커 이미지 배포
Lambda에서 도커 이미지를 사용하려면 이미지 배포 후 Amazon ECR에 푸시해야 합니다.
- 도커 이미지 빌드 및 로그인
# 도커 이미지 빌드
docker build -t my-lambda .
# AWS CLI로 ECR 로그인
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
- 도커 이미지 푸시 및 Lambda 설정
# 도커 이미지 푸시
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-lambda:latest
# AWS Lambda에 도커 이미지로 함수 생성
aws lambda create-function \\
--function-name my-lambda-function \\
--package-type Image \\
--code ImageUri=<aws_account_id>.dkr.ecr.<region>.amazonaws.com/my-lambda:latest \\
--role <role-arn>
이제 도커 이미지를 AWS Lambda에서 서버리스 함수로 실행할 수 있습니다.
5. Knative로 서버리스 환경 구축
Knative는 Kubernetes에서 서버리스 워크로드를 처리하기 위한 오픈소스 플랫폼입니다. 도커 컨테이너를 서버리스 함수로 실행할 수 있게 해주며, 자동 확장과 이벤트 기반 워크로드를 지원합니다.
Home - Knative
Run serverless containers in Kubernetes with ease. Knative takes care of the details of networking, autoscaling (even to zero), and revision tracking. Teams can focus on core logic using any programming language. Universal subscription, delivery and manage
knative.dev
Knative 설치
- Kubernetes 클러스터 준비
- Knative 설치
kubectl apply --filename <https://github.com/knative/serving/releases/download/v0.21.0/serving-crds.yaml>
kubectl apply --filename <https://github.com/knative/serving/releases/download/v0.21.0/serving-core.yaml>
6. 마무리
도커를 사용하면 서버리스 환경에서도 유연하게 컨테이너 기반 애플리케이션을 구축할 수 있습니다. OpenFaaS, AWS Lambda, Knative 같은 플랫폼을 통해 서버리스 컴퓨팅을 더 쉽게 활용할 수 있으며, 각 플랫폼의 장점을 도커와 결합해 확장성과 유연성을 극대화할 수 있습니다.
서버리스 환경 구축은 애플리케이션을 더 빠르게 배포하고 관리할 수 있는 강력한 도구이므로, 도커와 함께 사용하여 더 나은 개발 환경을 만들어 보세요.
'Docker > Docker 강의' 카테고리의 다른 글
[Docker 강의 25편(마지막)] 도커와 서버 배포 (0) | 2024.10.08 |
---|---|
[Docker 강의 23편] 도커 스웜(Docker Swarm) 개념 (1) | 2024.10.06 |
[Docker 강의 22편] 도커 컨테이너 백업과 복원 (0) | 2024.10.06 |
[Docker 강의 21편] 도커 이미지 보안 관리 (0) | 2024.10.06 |
[Docker 강의 20편] 도커와 마이크로서비스 아키텍처 (0) | 2024.10.05 |