ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.