안녕하세요 펭귄교수입니다.
서버리스(Serverless)는 현대 클라우드 컴퓨팅의 중요한 기술 중 하나입니다.
서버를 직접 관리하지 않고도 애플리케이션을 개발, 배포할 수 있다는 점에서 많은 개발자들에게 사랑받고 있습니다.
이번 포스팅에서는 도커(Docker)를 사용하여 서버리스 환경을 구축하는 방법에 대해 알아보겠습니다. 도커가 제공하는 유연성과 서버리스 아키텍처의 장점을 결합하여, 더 효율적이고 확장 가능한 시스템을 만들 수 있습니다.
1. 서버리스란?
서버리스(Serverless)는 개발자가 서버를 직접 관리하지 않고, 클라우드 제공 업체가 관리하는 서버에서 애플리케이션을 실행할 수 있도록 하는 컴퓨팅 모델입니다. 서버리스 환경에서는 인프라 관리의 복잡성을 줄이고, 개발자는 코드 작성과 애플리케이션 로직에만 집중할 수 있습니다.
서버리스 컴퓨팅의 핵심 특징은 다음과 같습니다.
- 자동 확장성: 트래픽 변화에 따라 자동으로 리소스가 할당됩니다.
- 비용 효율성: 사용한 만큼만 비용을 지불합니다.
- 빠른 배포: 인프라 설정이나 서버 구성이 필요 없습니다.
대표적인 서버리스 플랫폼으로는 AWS Lambda, Azure Functions, Google Cloud Functions 등이 있습니다. 도커를 사용하면 이러한 서버리스 기능을 로컬 환경에서도 구현할 수 있으며, 필요한 경우 클라우드로 쉽게 전환할 수 있습니다.
2. 도커와 서버리스
도커는 서버리스 컴퓨팅 모델과 잘 맞는 도구입니다. 도커 컨테이너는 경량화되어 있으며, 빠르게 시작되고, 리소스 소모도 적습니다. 이를 통해 도커로 서버리스 애플리케이션을 구동할 수 있습니다. 또한, 도커를 사용하면 애플리케이션을 로컬에서 개발하고 테스트한 후, 클라우드에 쉽게 배포할 수 있습니다.
도커로 서버리스 환경을 구축하는 방법:
- OpenFaaS와 같은 서버리스 프레임워크 사용
- AWS Lambda와 함께 도커 이미지 사용
- Knative 같은 클라우드 네이티브 서버리스 플랫폼 활용
이 포스팅에서는 OpenFaaS와 AWS Lambda를 이용한 도커 기반 서버리스 환경 구축에 대해 설명하겠습니다.
3. OpenFaaS로 서버리스 환경 구축
OpenFaaS는 도커와 Kubernetes에서 서버리스 애플리케이션을 쉽게 배포하고 관리할 수 있는 오픈소스 프레임워크입니다. OpenFaaS는 도커 컨테이너를 서버리스 함수로 실행할 수 있게 해주며, 간단한 설치와 확장이 가능합니다.
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는 도커 이미지를 지원하기 시작했으며, 이를 통해 도커 컨테이너로 서버리스 애플리케이션을 구동할 수 있습니다.
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에서 서버리스 워크로드를 처리하기 위한 오픈소스 플랫폼입니다. 도커 컨테이너를 서버리스 함수로 실행할 수 있게 해주며, 자동 확장과 이벤트 기반 워크로드를 지원합니다.
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 |