Amazon Lightsail에 컨테이너 웹 앱 배포
시작 안내서
모듈 1: 컨테이너 준비
이 모듈에서는 컨테이너화된 기본 웹 애플리케이션을 생성합니다
소개
이 모듈에서는 가이드와 함께 제공된 샘플 애플리케이션을 살펴봅니다. 제공된 웹 애플리케이션을 로컬에서 실행하고 클라우드에 배포하기 전에 로컬 랩톱에서 웹 애플리케이션을 테스트하기 위한 컨테이너를 구축하는 작업을 수행합니다.
학습 내용
- 기존 웹 애플리케이션에 대한 컨테이너 구축
- 로컬에서 애플리케이션을 테스트하기 위한 컨테이너 실행
사전 요구 사항
이 가이드를 시작하기 전에 필요한 사항은 다음과 같습니다.
- Docker 데스크톱이 설치됨
- Docker 명령에 대한 기본 작업 지식
소요 시간
10분
모듈 사전 요구 사항
- 관리자 수준의 액세스 권한이 있는 AWS 계정**
- 권장 브라우저: 최신 버전의 Chrome 또는 Firefox
[**]생성된 지 24시간이 지나지 않은 계정은 이 자습서를 완료하는 데 필요한 서비스에 액세스할 권한이 아직 없을 수 있습니다.
구현
클라이언트 앱 생성
코드 폴더에 제공된 웹 애플리케이션은 Python용 Flask 애플리케이션 프레임워크로 개발된 웹 애플리케이션입니다.
간단히 설명하자면 Flask 프레임워크는 HTTP 요청을 수신하는 미니 서버, 특정 요청(HTTP verb 및 /경로)을 Python 코드에 연결하는 라우팅 메커니즘 및 최종 HTML을 렌더링하는 템플릿 엔진을 포함합니다.
모범 사례는 Flask 애플리케이션 앞에 전용 웹 서버를 두는 것입니다. 웹 서버는 이미지, 스타일 시트(CSS) 및 JavaScript(JS) 파일과 같은 정적 콘텐츠를 제공하도록 구성되었습니다. 웹 서버는 모든 기타 요청을 Flask 애플리케이션으로 전달합니다. 이 가이드에서는 Nginx 웹 서버 사용을 선택합니다.
Nginx와 Flask 앱 간의 통신은 uWSGI 프로토콜로 이루어집니다. uWSGI 구성 요소는 Flask에 의해 제공됩니다.
애플리케이션의 설정은 이 이미지에 설명되어 있습니다.

애플리케이션은 다음 파일로 이루어집니다.
- application.py는 애플리케이션의 핵심이며 로직, 백엔드와의 통신(있는 경우) 등을 정의합니다.
- Pipfile은 웹 애플리케이션의 Python 종속성을 나열합니다.
- Dockerfile은 컨테이너를 구성합니다. 공식 Nginx 컨테이너에서 시작하여 Python, Flask 및 해당 종속성을 추가합니다. 그런 다음 Nginx 구성 파일 및 시작 스크립트를 복사합니다.
- nginx-app.conf는 Nginx 구성 파일입니다. 이는 다른 요청이 uWSGI/Flask로 전달되는 동안 정적 콘텐츠가 Nginx에 의해 제공되도록 합니다.
- start.sh는 Nginx 및 uWSGI 데몬을 시작합니다.
이 애플리케이션은 새로운 서비스 또는 제품의 시작을 알리는 간단한 웹 애플리케이션이며 사전 등록을 캡처하는 양식이 있습니다.
데이터 다운로드
컨테이너를 구축하고 테스트하려면 프로젝트의 로컬 사본을 다운로드합니다.
터미널을 열고 다음 명령을 입력합니다.
git clone https://github.com/aws-developer-center/dev-center-guides/
cd dev-center-guides/GS_003_web_app_lightsail/code
지금부터 모든 명령은 사용자가 이 디렉터리로 이동했다고 가정합니다.
컨테이너 구축
메인 애플리케이션 구성 요소와 이들이 함께 작동하는 방법에 대해 이해했으므로 이제 컨테이너를 구축하겠습니다.
컨테이너 내에 애플리케이션을 구축하려면 터미널을 사용하여 다음 명령을 입력합니다.
# Assuming you navigated to the application directory as instructed above
# Make sure to include the space and period after signup in the below command
docker build -t demo-flask-signup .
몇 분 후(인터넷 대역폭에 따라 다름), 컨테이너가 구축됩니다.
다음 명령을 사용하여 시스템에 컨테이너 이미지를 나열할 수 있습니다.
docker images
# It should output something similar to
REPOSITORY TAG IMAGE ID CREATED SIZE
demo-flask-signup latest 26d7924c5980 28 minutes ago 640MB
(...)
컨테이너 테스트
로컬 시스템에서 컨테이너를 테스트하려면 컨테이너를 시작한 다음 브라우저에서 컨테이너를 지정합니다.
docker run -p 8080:80 \
--rm \
-v ~/.aws:/root/.aws \
demo-flask-signup:latest
Docker 실행 명령에 전달된 옵션은 다음과 같습니다.
- -p 8080:80, 로컬 시스템 TCP 포트 8080을 컨테이너 포트 80(Nginx)으로 연결
- --rm, 컨테이너가 멈춘 경우 Docker에게 컨테이너 제거 지시
- -v ~/.aws:/root/.aws, 디렉터리 ~/.aws에서 컨테이너 디렉터리 /root/.aws로 로컬 시스템 AWS CLI 구성 매핑
- 마지막으로, demo-flask-signup:latest - 방금 구축한 컨테이너의 이름 및 태그.
이제 컨테이너가 실행 중이며, 브라우저를 열고 http://localhost:8080에서 가리킵니다. 아래에서 보이는 바와 같이 애플리케이션 홈 화면이 표시되어야 합니다.

축하합니다. 이제 컨테이너가 클라우드로 배포될 준비가 되었습니다.