그런뒤 로컬의 package.json의 스크립트를 하나 추가하자
"start-eco-container": "npm i && npm run build && pm2 reload ecosystem.config.js --only deploytest --env production",
도커파일 정보
FROM node:alpine
# ENV PORT 3000
# ENV NODE_ENV production
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install && npm install pm2 -g
COPY ./ ./
RUN npm run build
# CMD ["npm", "run", "start-eco-container"]
CMD npm run start-eco-container && pm2 logs
위와같이 작성한뒤
docker build -t test .
테스트 이미지 생성
docker run --name testServer -it -d -p 80:8080 test
localhost으로 접근
잘 접속된다
이제여기서 소스파일이 바뀌었다는 가정하에 다시 배포하는걸 진행시켜보자.
docker cp을 사용해서 로컬파일들을 컨테이너 안에 복사해보자(덮어쓰기로진행됨)
docker cp [localDirectory][container]:[container directory]
컨테이너 딜랙토리는 도커파일의 workdir으로 해야한다.
docker cp ./ testServer:/usr/src/app/.
그런뒤 다음 커맨드를 입력하자
docker exec testServer npm run start-eco-container
무중단 배포가 완료된후 다음화면과 같이 바뀐다.
goTOAb1111out => goTOAbout 으로 바뀌었다.
로직을 설명하자면
이러한 과정을 거치면 소스가 변경되면 컨테이너 내에서 변경된 코드로 서버를 재시작할 수 있다.
완벽한 서버 관리 로직은 아니다
아직 젠킨스 ec2 같은 서비스를 이용하지 않았기때문..
다음 포스트에선 젠킨스로 한번 해보자