ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 어플리케이션 코드 수정 후 빌드 - Docker Volume
    백엔드 관련 강의 공부/도커와 CI환경 2023. 12. 30. 19:50

    소스 코드 변경 이후에 다시 빌드를 한다면 이미지를 생성하는 docker build와 앱을 실행하는 docker run을 반복해야 한다.

    이미지 생성부터 새롭게 해줘야하기 때문에 효율적이지 않은 방법이다.

     

    Dockerfile에서 COPY를 통해 진행하기 때문에 COPY를 하려면 이미지를 새로 만들어야 하기 때문이다.

     

     

    어플리케이션 소스 수정 후 재빌딩 시 효율적인 방법

     

    사진 : 인프런 강의 - 따라하며 배우는 도커와 CI환경

    위의 사진을 보면 COPY가 2번 이루어진다. 첫 번째 COPY는 package.json을 받아와서 종속성 부분의 파일만 복사하고, 두 번째 COPY에서 전체를 복사한다.

     

     

    이렇게 하면 소스만 변경할 때에는 package.json은 캐시를 사용해서 다시 다운받지 않고, 다른 소스코드 파일만 변경한다.

     

    코드 변경 후 빌드를 해보면 package.json은 CACHED라고 나오는 것을 확인할 수 있다.

     

     

     

     

     

    Docker Volume

    사진 : 인프런 강의 - 따라하며 배우는 도커와 CI환경

    기존의 COPY 방식은 소스 코드가 변경될 때마다 도커 이미지를 새로 만들어서 build를 해야했었다.

     

    사진 : 인프런 강의 - 따라하며 배우는 도커와 CI환경

    Docker Volume은 도커 컨테이너가 로컬의 파일들을 참조하도록 하는 방식이다.

     

    docker run을 할 때 추가 명령어를 적어주면 된다.

     

     

    명령어 예시

    docker run -p 5000:8080 -v /usr/src/app/node_modules -v ${PWD}:/usr/src/app <이미지 아이디>

     

    • -v /usr/src/app/node_modules : host 디렉토리에 node_module이 없어서 매핑하지 말라는 명령어
    • -v ${PWD}:/usr/src/app : 해당 경로에 있는 디렉토리 혹은 파일을 /usr/src/app 경로에서 참조하라는 명령어

    npm을 다운받을 때 node_module은 로컬 머신에 없고, 컨테이너에 있기 때문에 node_module은 매핑하지 않아야 한다.

    두 번째에서 $(pwd)는 현재 디렉토리의 경로를 뜻하며, 현재 디렉토리를 컨테이너의 /usr/src/app 경로에 참조하는 것이다.

    (로컬 머신 경로 : 컨테이너 경로)

     

     

     

    run을 할 때 volume을 추가해서 run을 하면 이미지를 생성하는 build를 하지 않더라도 도커를 stop한 다음에 다시 run을 해주면 바뀐 소스코드가 반영된다.

     

    hello world를 반갑습니다 !!!로 변경해보았다.

     

    docker build를 하지 않고 run만 했을 뿐인데 반영이 되었다.

Designed by Tistory.