Docker란 무엇인가?
Docker는 컨테이너화된 애플리케이션을 개발, 배포 및 실행하기 위한 오픈 소스 플랫폼이다. 이를 통해 개발자는 어디서나 일관된 환경에서 코드를 실행할 수 있게 되며, 인프라 환경에 구애받지 않고 애플리케이션을 손쉽게 배포할 수 있다.
Docker의 주요 개념
Docker의 핵심 개념은 다음과 같다:
- 이미지 (Image): 애플리케이션과 그 환경을 포함한 불변의 파일이다. 도커 이미지는 컨테이너를 생성하는 템플릿 역할을 한다.
- 컨테이너 (Container): 이미지를 실행한 상태로, 애플리케이션이 동작하는 환경이다. 각 컨테이너는 격리된 공간에서 실행된다.
- Docker Hub: 도커 이미지를 공유할 수 있는 레지스트리 서비스이다. 개발자는 Docker Hub를 통해 이미지를 검색하고 다운로드할 수 있다.
도시락 상자 예시
- 도시락 상자 (컨테이너):
- 엄마가 만든 맛있는 음식을 도시락 상자에 담는다고 생각해봐. 도시락 상자는 음식(프로그램)을 안전하게 담아서 어디든지 가지고 다닐 수 있게 해줘.
- 이 도시락 상자가 바로 Docker의 '컨테이너'야. 컨테이너는 프로그램과 필요한 모든 것을 담아서 어디서든지 실행할 수 있게 해주는 거야.
- 요리법 책 (이미지):
- 엄마가 음식을 만들 때 요리법 책을 보고 만드는 것처럼, Docker도 프로그램을 만들 때 '이미지'라는 걸 사용해. 이미지는 프로그램을 만들고 실행하기 위한 지침서 같은 거야.
- 이 요리법 책(이미지)을 보면 어떤 재료(파일)와 도구(설정)가 필요한지 알 수 있어.
- 도시락 가게 (Docker Hub):
- 엄마가 요리법 책을 사고 싶을 때 서점에 가는 것처럼, Docker는 'Docker Hub'라는 가게에서 이미지를 다운받아 사용할 수 있어. Docker Hub에는 다양한 프로그램 이미지를 찾을 수 있어.
왜 Docker가 좋을까?
- 일관성:
- 엄마가 집에서 만든 음식이든, 학교에서 만든 음식이든 도시락 상자에 담겨 있으면 항상 같은 맛을 낼 수 있어. Docker도 프로그램을 어디서 실행하든 항상 똑같이 동작하게 해줘.
- 편리함:
- 도시락 상자에 음식을 담으면 언제든지 어디서든지 꺼내 먹을 수 있잖아. Docker도 프로그램을 쉽게 만들고 배포하고 실행할 수 있게 해줘.
- 효율성:
- 도시락 상자는 작은 공간에 여러 음식을 담을 수 있어서 효율적이야. Docker도 컴퓨터 자원을 효율적으로 사용해서 여러 프로그램을 동시에 실행할 수 있어.
- 일관성: 개발, 테스트, 프로덕션 환경에서 동일한 환경을 보장한다.
- 효율성: 시스템 자원을 효율적으로 사용하며, 빠른 배포와 확장이 가능하다.
- 이식성: 컨테이너는 어디서나 실행될 수 있으므로, 특정 인프라에 종속되지 않는다.
Docker 설치방법
1.docker 공식 홈페이지에 접속한다.
환경에 맞게 설치 한다.
설치가 끝나면 재부팅 할 것 이냐고 묻는데 꼭 재 부팅 해야 한다. 안그러면 아래와 같은 오류가 생긴다.
또는
2. AWS에 들어가서 IAM 검색후 들어 간다음 사용자 클릭해준다.
사용자 이름에 있는 api_dev 이것을 클릭해주자.
권한 클릭 후 권한 추가 클릭
직접 정책 연결 체크
권한 아래의 사진 속에 있는 것만 모두 체크해준다.
그다음 이것도 권한 추가 해준다.
그 다음 AWS에서 검색창에 container 검색 후 빨간 동그라미 쳐있는 곳 클릭
지역설정이 서울인지 잘 확인해본다.
리포지토리 생성 클릭
퍼블릭으로 설정(프라이빗은 과금 될 수 있음)
리포지토리 이름은 배포할 폴더명-dev 로 지어주면 된다.
그다음 레파지토리 생성 눌러준다.(다른 설정 건드리지 않는다)
권한 전부 추가하
정책 JSON 편집 클릭
ecr-public:GetAuthorizationToken
이 코드 작성 하고 ,(쉼표) 잘 확인한다.
VSC 코드로 들어가서 Dokerfile 로 파일을 하나 만든다. 그다음 Docke 확상 설치 문구가 뜨면 설치해준다.
익스텐션에 들어가서 docker 설치해주자.
Dockerfile 에 들어가서 아래 코드를 넣어주자.
FROM public.ecr.aws/lambda/python:3.10
COPY . ${LAMBDA_TASK_ROOT}
COPY requirements.txt .
RUN yum -y install gcc
RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
CMD ["app.handler"]
그 다음 .dockerignore 이라는 파일을 또 만들어주고, 거기에 코드를 넣어준다.(아래 참조)
__pycache__
.git
.serverless
.gitignore
.dockerignore
serverless.yml
serverless.yml 파일도 아래화면 처럼 수정해주자.
service: aws-s3-upload-app
frameworkVersion: '3'
custom:
wsgi:
app: app.app
provider:
name: aws
runtime: python3.10
region: ap-northeast-2
functions:
api:
handler: wsgi_handler.handler
events:
- httpApi: '*'
plugins:
- serverless-wsgi
- serverless-python-requirements
그다음
requirements.txt 파일에 들어가서 아래 코드 넣어준다.
(pandas,serverless-wsgi,numpy)가 추가됐다.
Flask==1.1.4
Werkzeug==1.0.1
markupsafe==2.0.1
serverless-wsgi
flask-restful
mysql-connector-python
psycopg-binary
passlib
flask-jwt-extended
email-validator
pandas
numpy
이제 터미널 이나 cmd 창으로 들어가서
pip install serverless-wsgi
함으로써 serverless-wsgi 설치
app.py로 들어가 아래 코드 추가
def handler(event, context):
return serverless_wsgi.handle_request(app,event,context)
그후 터미널에 sls deploy 함으로써 배포 해주고, 결과를 확인해보자.
잘 되는 것을 볼 수 있다.
'RestfulAPI' 카테고리의 다른 글
Flask RESTful API를 사용한 네이버 뉴스 검색 API 호출하기(2) (0) | 2024.05.29 |
---|---|
Flask RESTful API를 사용한 네이버 뉴스 검색 API 호출하기(1) (2) | 2024.05.29 |
Serverless Framework와 Github Acitons를 이용한 AWS 자동 배포 (0) | 2024.05.24 |
AWS Serverless Framework 설치 방법 (0) | 2024.05.23 |
RestfulAPI Flask에서 JWT 사용하여 로그인 및 로그아웃하기 (2) | 2024.05.23 |