aws EFS and k8s
현 상황 :
AWS ECS 와 ALB 를 설정해둠
AWS Fargate는 서버를 관리하지 않고도 애플리케이션 구축에 초점을 맞출 수 있도록 지원하는 종량제 서버리스 컴퓨팅 엔진입니다.
Elastic File System :
Docker container 종료시 기본적으로 데이터가 삭제가 된다.
이는 볼륨을 추가적으로 설정하여 컨테이너가 종료가 되어도 데이터를 보존 하는 방식으로 사용하는데,
Elastic Container System도 이와 같은 기능이 있다.
Elastic File System.
BindMount : 우리가 모르는 장소에 데이터가 저장이 된다.
EFS : 우리가 알 수 있는 장소에 데이터가 저장 된다.
DB 구축시 고려 사항.
최종 Targegt 아키텍처
개발을 완료를 했다고 바로 배포를 하지 않고 product 에 맞게 최적화를 시키는 작업이 필요하다.
React script 를 보면 다음 두가지의 경우가 있다.
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
...}
Start. 는 개발용이다. start 로 실행할시 다음 frontend app.js코드를 브라우저 친화 적인 코드로 변화를 시킨다.
return (
<div>
{error && <ErrorAlert errorText={error} />}
<GoalInput onAddGoal={addGoalHandler} />
{!isLoading && (
<CourseGoals goals={loadedGoals} onDeleteGoal={deleteGoalHandler} />
)}
</div>
);
브라우저는 위의 코드를 실행하지 않습니다. == > 개발 중에는 필요하지만 제품 배포용에는 적합하지 않습니다.
build 는 배포용 입니다. 컴파일 및 최적화를 하여 start 보다 가볍고 최적화된 파일을 내보냅니다.
Dockerfile.prod
FROM node:14-alpine as build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm, "run, "build"]
포트 노출이 없으니 삭제, start -> build 로 바꿔준다.
결과 : 최적화된 파일
production 에서 이용이 가능한가 -> x
서버가 필요하다.
Multi -Stage Build
사용법 : FROM 명령은 새 스테이지를 만든다.
copy --from=build 를 통해 (1 줄에 as build 라는 이름으로 설정해둠) 원하는 스테이지의 최종 결과를 가져온다.
/app/build : 가져올 파일 위치
/usr/share/nginx/html : 복사해서 넣을 위치.
FROM node:14-alpine as build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
CMD ["nginx", "-g", "daemon off;"] : nginx 를 시작하는 커멘드이다.