따라하며 배우는 도커와 CI환경 수강 및 실습하면서 정리한 내용입니다.
Dockerfile 개발용(Dockerfile.dev), 운영용(Dockerfile) 따로 만들기
docker build -f Dockerfile.dev -t 아이디/폴더이름 ./
로컬에서 도커 실행할 경우 node_modules 지우기
(이미지 빌드할 때 npm install로 모든 모듈을 다운받기 때문)
로컬 포트와 컨테이너 포트 맵핑
docker run -p 로컬포트:컨테이너포트 아이디/폴더이름
cf. 리액트 버전에 따라 -it 옵션을 추가해야할 수도 있음. 실습한 18.3.1버전에서는 -it 없어도 npm run start시 실행되었음
소스 코드 변경시 이미지 빌드 없이 바로 화면에 반영하게 할 때 사용.
docker run -p 3000:3000 -v /usr/src/app/node_modules -v $(pwd):/usr/src/app 아이디
테스트 코드 변경시 바로 반영되게 하려면 compose파일에 test를 위한 컨테이너 추가
docker-compose up --build
이미지 빌드 중에 permission denied 에러 해결
sudo chown -R $(whoami) ~/.docker
이미지 생성 docker build -f dockerfile.dev .
앱 실행 docker run -it 이미지 이름 npm run test
// Dockerfile
FROM node:alpine as builder
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY ./ ./
RUN npm run build --> Builder Stage
FROM nginx
COPY --from=builder /usr/src/app/build /usr/share/nginx/html --> Run Stage
개발환경과 운영환경을 다르게 설정 -> 개발환경은 빌드없이, 운영에서는 빌드필요
이유: nginx는 변경사항을 빌드 없이는 바로 반영하지 못함. 개발에서 필요한 기능들이 있을 수 있기에 일반적으로 다르게 셋팅함.
--from=builder
: 다른 스테이지에 있는 파일 복사할 때 다른 스테이지 이름 명시. 실습때 FROM에서 as builder라고 했기에 builder임/usr/src/app/build/
/usr/share/nginx/html
클라이언트 요청들어올 때마다 Nginx가 알맞은 정적파일을 제공하기 해당 경로로 빌드된 파일 복사. 설정 통해 변경 가능/usr/src/app/build
에 생성됨