아래 사진은 node.js 사용 예제이다.
node 자바스크립트파일명.js
ex09를 생성한 후 db 서버의 Dockerfile 작성
product 서버의 Dockerfile 작성
(product 폴더는 메타코딩 님의 github에서 다운로드 받았다)
db 서버의 init.sql
작성
컨테이너가 실행될 때 자동으로 작동
Entity의 테이블 명이 product_tb
이므로
그에 맞춰서 작성
데이터는 banana,apple,melon을 기입
product의 Dockerfile을 보면 ENTRYPOINT 가 있다.
java -jar -Dspring.profiles.active=prod app.jar
applicaion.yml에도 yml 활성화 선택이 있다.
Spring Boot는
application-{profile}.yml
또는application-{profile}.properties
파일을 자동으로 인식하여 해당 프로파일에 맞는 설정을 로드한다.
※ appication.yml (ex : application-profile명.yml을 활성화)
spring:
profiles:
active:
- profile명
명령줄 인수로 표현하려면 다음과 같다
-Dspring.profiles.active=profile명
만약 아래처럼 각각 활성화 yml명이 다를 경우, 다음과 같은 우선순위를 같게 된다.
※ yml 적용 우선 순위
1. 명령줄 인수
2. 환경 변수
3. application.yml 파일
즉, 명령줄 인수가 prod, application.yml
이 dev를 활성화하였다면 prod를 따르게 된다.
docker-compose.yml
작성
여기서 product는 server라는 서비스로 정의 할 것이다.
db는 db 서비스로 정의
docker-compose는 db, server를 하나로 묶어 연동시킬 것이다.
server에서 db로 연동시킬 떄는 호스트 포트 (3307)가 아닌 내부 포트(3306)를 지정해야한다
server 의 port도 내부 포트 (8081이 아닌 8080)을 설정해 주어야 한다.
ProductApplication.java
의
@Profile("dev")
는 application-dev.yml
에 대해서만 실행하는 Bean이다
설정을 완료하였으면 docker-compose를 빌드 및 실행한다.
서버 실행 상태이 확인된 후, metadb에 product_tb 테이블이 생성됨을 확인하였다.
product의 ProductController
를 보면 /products
에 대한 핸들러 메서드가 작성되어 있는 것을 확인할 수 있다.
localhost:8081/products
로 이동하면 db 결과를 잘 가져옴을 확인할 수 있다
MySQL workbench에서도 해당 db를 확인할 수 있으며, 추가 데이터를 기입했을 때 상태를 테스트하려고 한다.
이번엔 Dockerfile의 명령줄 인수 중 ENTRYPOINT의 yml 활성화를 prod가 아닌 dev로 설정할 것이다.
설정 시 우측의 @Profile("dev")
Bean이 활성화 될 것이다
재빌드 시 ddl-auto=create
이므로 기존 데이터가 사라지고 바나나, 딸기, 참외가 새로 출력이 되었다.
@Profile("dev")
가 활성화된 것을 확인하였다.
데이터를 추가로 기입을 해보았을 때, 데이터가 잘 기입된 것을 확인
여기서 yml의 활성화 대상을 다시 dev->prod로 바꾸었을 때, 그대로 인 것인 것을 확인할 수 있는데
prod의 ddl-auto=none 이기 때문이다.
Dockerfile은 이미지를 빌드할 때만 실행이 되며, MySQL이 이미 초기화가 된 경우에는 init.sql
이 실행되지 않는다.
만약 기존의 banana,apple,melon INSERT문을 자동으로 로드하고 싶다면 컨테이너를 prod로 새로 시작해야 한다
webapp/index.html
을 /usr/share/nginx/html/
에 복사할 것이다nginx로 옮길 index.html
작성
nginx-app
라는 이름으로 빌드 및 실행
nginx-app
이 잘 구동된 것을 확인
nginx 테스트가 끝났으니, 프론트서버를 띄울 nginx 서버 추가
- npx 설치 및 실행
npx create-react-app my-app- 리액트 디렉토리 내 강제 설치
npm install --legacy-peer-deps
설정이 끝났다면 react를 html으로 빌드해야한다.
npm run build
빌드가 끝나면 리액트 (my-app) 하위 폴더에 build 폴더가 생성될 것이다
react 파일들을 docker로 build 한다.
docker build -t 빌드할이름 .
빌드 후 서버 동작 확인
react의 build 폴더가 nginx 내부에 잘 옮겨졌는지 확인 한다.
기존 react의 Dockerfile를 수정하여, 빌드 및 복사 관련 내용을 추가한다.
npm run build
내용이 기입되어 있으므로 docker build
만 하면 된다