이번에 회사앱에 추진할 보안 솔루션을 개발을 하면서 Dockerfile로 프로젝트 빌드가 필요했다.
해당글은 Dockerfile을 만들면서 겪었던 오류에 대해 기록하는 글이다.
아무 생각없이 RUN, CMD 구분없이 Dockerfile을 처음에 작성했다..
최종적으로 내가 필요한건 node production 모드로 빌드후 dist 패키지 파일이 필요했는데 이게 빌드 과정에서 찍을땐 보이는데 컨테이너 실행후 해당 경로를 로컬 호스트에 volume 바인드하여 가져오면 파일이 아무것도 없는것이었다..
그래서 원인을 찾다보니 RUN과 CMD를 내맘대로 사용했던것이 원인이었다..
Dockerfile을 작성하면서 RUN은 패키지를 설치할때 사용해야한다. 즉 이미지를 빌드할때 필요한 명령어는 RUN을 사용해야 한다.
그렇다면 CMD는 언제 쓰나면 마지막으로 이미지 빌드후 컨테이너를 실행할때 사용할 명령어를 써야하는 것이었다.
즉 RUN은 이미지 빌드에 필요한 패키지 설치나, 빌드시에 해야할 일을 할때 쓰고
CMD는 컨테이너를 실행할때 실제로 사용할 명령어이다.
# 빌드시 RUN 명령어가 실행되고
docker build -t temp .
# 이미지 생성후 실제 컨테이너를 쓸때 이때 Dockerfile의 cmd가 실행됨.
docker run -d -it --name rs -v ${workspace}/www/dist:/my/app/www/dist temp
즉 마지막에 실제로 컨테이너에서 실행이 필요한 명령어는 CMD로 작성하면 된다!