
예전에 어디서 도커 휴지케이스 협찬받았다는걸 봤음 저도 주세요
각설하고~ 이번 프로젝트에서 배포는 도커로 진행하게 되었음
도커 편하다 편하다~ 하고 도커에 대해서 깔짝 거려보긴 했지만 그래서 뭐 어떻게 쓴다는거지 싶었는데 이번에 사용하면서 이렇게 쓰는거구나~ 하고 알게되었다. 아주 쪼금?

이건 프로젝트의 간략한 구조
front랑 back은 docker로 띄워주고 서버에 nginx를 둬서 uri에 따라 front는 3000번 포트로 backend는 5001번 포트로 가게끔 해줬다.
서버는 Ubuntu Focal 20.04 (LTS)
docker 설치는 아래 링크 참고해서 설치! 설치하는 것도 글로 썼으면 좋았을텐데 오늘을 dockerfile에 조금 더 집중하고 다음에 설치 관련해서 글쓰는걸로..
https://docs.docker.com/engine/install/ubuntu/#installation-methods
찾아보면 많이 나올텐데 나는 찾아봐도 엥.. 그래서 이게 뭐지 싶었던게 많아서 나름 내가 이해한 걸 추가해서 덧붙임.
이 외에도 여러가지가 있지만 내가 사용해본 것 위주로 정리했고 앞으로 추가예정
FROM node:lts
WORKDIR /usr/src/app
COPY package*.json ./
RUN install
COPY . .
EXPOSE 5001
CMD [ "yarn", "start" ]
실제로 작성했던 backend Dockerfile 이건 최종본이 아니고 여기저기 찾아보면서 복붙해서 만들었던 것. 그리고 yarn start로 실행해주는 것보다는 build해서 실행시켜주는게 더 안정적이라는 말을 듣고 Dockerfile로 build 해준 후 실행시키기로 함
⬇️
FROM node:lts as builder
WORKDIR /usr/src/app
COPY . .
RUN ["/usr/local/bin/npm","install"]
RUN ["/usr/local/bin/npm","run","build"]
FROM node:alpine
WORKDIR /app
COPY --from=builder /usr/src/app/dist ./dist
COPY --from=builder /usr/src/app/package*.json .
COPY --from=builder /usr/src/app/.env .
COPY --from=builder /usr/src/app/prisma ./prisma
RUN npm install
RUN npx prisma generate
EXPOSE 5001
CMD ["npm", "run", "server"]
FROM node:alpine 를 기준으로 앞 부분이 build 해주는 과정이다.
첫번째 FROM은 node:lts이고 두번째 FROM은 node:alpine인데 두번째 alpine은 첫번째에 비해서 가벼운 버전.
build 후에 실행 할때는 가벼운 곳에서 돌리는게 이미지 용량도 작아지고 더 좋다고 해서 build 후 환경은 alpine을 선택했다.
처음에 dockerfile을 작성했을 땐 RUN npx prisma generate를 빼놓고 작성했었는데 계속 컨테이너가 죽어버렸나? 컨테이너는 잘 떴는데 통신이 안됐나 그랬음.
docker logs 컨테이너ID 명령어를 입력해서 보니 prisma generate가 안돼서 생긴 문제 그래서 RUN npx prisma generate 명령어를 추가해줌
그렇게 하고나니 제대로 돌아감!
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
backend와 마찬가지로 Dockerfile에서 build도 같이 해주기로 했다.
⬇️
# 첫 번째 단계: Node.js를 사용하여 React 애플리케이션 빌드
FROM node:lts as builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install
COPY . .
RUN yarn build
# 두 번째 단계: Nginx로 빌드된 애플리케이션 서빙
FROM nginx:latest
COPY nginx/nginx.conf /etc/nginx
WORKDIR /app
COPY --from=builder /usr/src/app/build ./build
CMD ["nginx", "-g", "daemon off;"]
백엔드랑 마찬가지로 첫번째 단계에서 build 해주었다. nginx 설정은 container 내부에 접속해서 설정을 따로 해주기보다는 conf 파일을 미리 만들어주고 복사해주는 형식으로 진행! ~.~
Dockerfile을 한 번에 잘 돌아가게끔 만들어주면 좋겠지만 아무래도 지금 단계에서는 그냥 여러번 build 해주고 docker logs 찍어주고 docker exec로 내부도 들어가보면서 체크하는게 최선인 것 같다.
그리고 docker compose도 만드는대로 추가할 예정..