-
Docker 로 react 실행및 자동변경 가능하게하는법개발/docker 2020. 4. 28. 20:36
커스텀 네임 dockerfile
# dev 용 FROM node:alpine #컨테이너의 /app 경로에 WORKDIR '/app' #package.json 을 복사후 COPY package.json . #npm install 을 실행후 RUN npm install #나머지 파일드를 복사후 COPY . . #npm run start 실행 CMD ["npm","run","start"]
ㅇ
dev 버전으로만 사용할 Dockerfile 을 사용하기위해 Dockerfile 이아닌 Dockerfile.dev 이라는 이름을 쓰려한다.
보통 해당 경로에서 Docker build . 을 사용하는데 이런경우
Docker build -f Dockerfile.dev .
명령어를 사용하면된다.
React 개발의경우 수많은 node modules 가 있기때문에 모두다 카피하게된다.
Sending build context to Docker daemon 193.3MB Step 1/6 : FROM node:alpine ---> 483343d6c5f5 Step 2/6 : WORKDIR '/app' ---> Using cache ---> 1d63fd9533c7 Step 3/6 : COPY package.json . ---> 9276db72e695 Step 4/6 : RUN npm install
이미 node_modules 는 복사됬으므로 이후에 node_modules 를 삭제후 빌드하면 빨리빌드할수있다.
docker로 리액트를 실행하려면 일반적인 docker run CONTAINER ID 가 아닌
docker run -it -p PORT:PORT(React) CONTAINER ID 를 사용한다.
docker voulme
만약 리액트 코드를 바꿧을때 docker run 의경우 컨테이너의 내용이 변하지 않으므로 변경이 반영되지 않느다.
다시 빌드하고 런해야한다.
docker volume 을 사용하면 가능해진다.
voulme 을 사용하기 위해서는
docker run -it -p PORT:PORT(React) -v /app/node_modules -v $(pwd):/app CONTAINER ID 를 사용한다.
-v 에서 콜론(:) 를 사용하면 :뒤에있는걸 사용할때 :앞에있는것을 참조하라 라는 뜻이다. (매핑)
즉 (컨테이너안의) /app 을 찾을때 (컨테이너밖의) pwd(지금터미널위치) 를 참조한다
ganghwiui-MacBook:frontend hwi$ docker run -it -p 3000:3000 -v /app/node_modules -v $(pwd):/app b1ddf66bd379
이렇게 빌드해주면 리액트 코드를 변경시 자동으로 리액트 앱을 변경할수있다.
docker-compose 는 도커를 실행할때 편의를 위해 사용한다.
위의 명령어처럼 실행하면서 옵션들을 지정해주지않고
docker-compose 파일에 다 써놓으면된다.
version: '3' services: web : build: context: . dockerfile: Dockerfile.dev ports: - "3000:3000" volumes: - /app/node_modules # 컨테이너밖: 컨테이너안 - .:/app stdin_open: true
포트,볼륨 지정을 여기서 다해주며 dockerfile도 지정해준다. docker-compose로 실행하려면 "docker-compose up" 하면 된다.
npm run test 의 경우 앱을 테스트할때 사용한다. docker 를 사용해 test 하려면 docker를 실행한뒤
다른 터미널에 들어가 docker exec -it CONTAINER ID npm run test 이런식으로 추가 명령어를 해주는방식으로 가능하다.
하지만 이런 방법 보다는 docker-compose 파일에 새로운 서비스를 추가함으로써 두개 컨테이너를 동시에 돌릴수있다.
version: '3' services: web : build: context: . dockerfile: Dockerfile.dev ports: - "3000:3000" volumes: - /app/node_modules # 컨테이너밖: 컨테이너안 - .:/app stdin_open: true tests: build: context: . dockerfile: Dockerfile.dev volumes: - /app/node_modules - .:/app command: ["npm","run","test"]
테스트는 포트가 따로 필요없으니 제외하고 추가 커맨드를 넣어 주면 된다.
볼륨을 지정해줬으니 테스트 코드가 변경되어도 자동으로 테스트 해준다.
'개발 > docker' 카테고리의 다른 글
travisCI - Github 연동해서 docker 빌드하기 (0) 2020.05.03 docker로 react 빌드하기 (0) 2020.05.03 docker-compose (0) 2020.04.14 Docker 로 Node 서버 빌드, 실행하기 (0) 2020.04.07 docker image 생성 (0) 2020.03.30