SW/Kubernetes, Docker

실수 없이 npm 명령어 실행하는 법 – Docker Entrypoint로 깔끔하게!

얇은생각 2025. 9. 23. 07:30
반응형

실수 걱정 없는 NPM 컨테이너 만들기 – 내 이야기처럼 풀어보는 Docker Entrypoint 사용법

진짜 솔직히 말해서, 단순히 npm install 한 줄 치고 싶을 뿐인데... 왜 내 개발 환경은 항상 불안하고 복잡한 걸까요? 예전엔 잘못된 명령 하나로 진짜 중요했던 파일이 날아가서 멘붕 온 적도 있어요. 하루 종일 쓴 코드가 휘이이익... 사라지는데 아무 말도 못 했던 그날 기억나요.

그래서 찾은 게 바로 Docker. 이거 하나로 내 작업 공간이 진짜 ‘따로 노는’ 공간처럼 깔끔해지더라고요. 오늘은 제가 실제로 써보면서 느낀 Docker + NPM 컨테이너 설정 노하우를 완전 현실 버전으로 풀어드릴게요.

 


 

아무거나 다 되면 문제야: 너무 자유로운 컨테이너가 무서운 이유

 

아무거나 다 되면 문제야: 너무 자유로운 컨테이너가 무서운 이유

Docker로 컨테이너 하나 띄우고 bash 접속하면 뭐든 할 수 있죠. 저도 처음엔 신났어요:

docker run -it mycontainer bash

 

근데 이게 생각보다 무서운 거예요. volume 설정 잘못해서 컨테이너 안에서 삭제한 파일이 진짜 내 컴퓨터에서도 사라진 적, 있었어요. 당시 프로젝트 거의 완성됐었는데... 다시는 그런 일 없게 하고 싶었죠.

 


 

그래서 선택한 ‘제한된 자유’: NPM만 되는 컨테이너 만들기

 

그래서 선택한 ‘제한된 자유’: NPM만 되는 컨테이너 만들기

그래서 ‘딱 NPM 명령어만’ 실행되는 컨테이너를 만들기로 했어요. 그랬더니 신기하게도 일이 훨씬 단순해지고, 실수할 일도 확 줄었죠.

  • Node.js 작업만 할 수 있게 딱 정리돼 있고,
  • 위험한 명령은 아예 실행 안 되고,
  • 무슨 용도인지 헷갈릴 일도 없음!

npm init, npm install... 자주 쓰는 것만 딱 되는 그 심플함이 오히려 자유롭더라고요.

 


 

Entrypoint: 이걸로 명령어를 ‘고정’시킬 수 있어요

 

Entrypoint: 이걸로 명령어를 ‘고정’시킬 수 있어요

Dockerfile 만들다 보면 CMD랑 ENTRYPOINT 헷갈리죠? 저도 그랬어요. 핵심만 말하자면:

  • CMD는 나중에 덮어쓸 수 있고,
  • ENTRYPOINT는 딱 ‘기본 명령어’로 고정돼요.

 

예를 들어 Dockerfile에 이렇게 쓰면:

ENTRYPOINT ["npm"]

 

그다음 이렇게 실행하면:

docker run mynpm init

 

결국 이건:

npm init

 

이 되는 거예요! 진짜 신기하죠? npm이라는 단어조차 안 쳐도 되니까, 쓸 때마다 소소하게 기분 좋아요.

 


 

실제로 써본 방법: 내가 만든 NPM 컨테이너는 이렇게 동작해요

Step 1: Dockerfile은 이렇게 심플하게

FROM node:18
WORKDIR /app
ENTRYPOINT ["npm"]

 

그리고 빌드는 이렇게:

docker build -t mynpm .

 

Step 2: 프로젝트 초기화는 단 한 줄

docker run -it -v $(pwd):/app mynpm init

 

내 현재 디렉토리가 /app으로 마운트돼 있으니까, 결과물은 내 폴더에 그대로 생겨요. 완전 깔끔하게.

 

Step 3: express 설치도 문제없어요

docker run -it -v $(pwd):/app mynpm install express --save

 

package.json, node_modules까지 로컬에 쫙쫙 잘 들어오고, 따로 뭐 신경 쓸 거 없더라고요.

 


 

왜 이렇게 좋냐고요? 해보면 알아요.

이런 구조는 실제로 Docker 많이 쓰는 개발자들이 자주 쓰는 방식이에요. 뭔가 ‘정돈된 느낌’이 들거든요. 프로젝트마다 환경 다르고 버전 꼬이고 이런 거 진짜 스트레스인데, 이걸로 많이 줄었어요.

물론, 명령어가 조금 길긴 하죠. docker run -it -v ... 이거 매번 치는 거 솔직히 귀찮잖아요?

 


 

그래서 준비했어요: Docker Compose로 단축키처럼 쓰기

Docker Compose를 써보세요. 진짜 신세계예요:

version: '3'
services:
  npm:
    image: mynpm
    volumes:
      - .:/app
    stdin_open: true
    tty: true

 

이제 명령어는 이렇게 바뀌어요:

docker-compose run npm init

 

와... 이건 정말 ‘npm init’ 바로 실행하는 느낌이에요.

 


 

왜 이 방식이 감동이냐면요… 진짜 배려거든요

사실 이 방식은 저 혼자 잘 써보려고 만든 게 아니었어요. 팀원들이랑 같이 작업하다 보면, 누군가는 실수로 중요한 파일 덮어쓰기도 하고, 누군가는 환경 셋업하는 데 하루종일 걸리기도 해요.

이걸로 모두가 안전하게, 똑같이 작업할 수 있게 되니까 협업도 훨씬 부드러워지더라고요. 이게 진짜 개발자가 할 수 있는 작은 배려 아닐까요?

 


 

한 줄 요약: ‘mynpm’ 하나로 개발 스트레스 확 줄이기!

Docker랑 Entrypoint, 딱 두 개만 잘 써도 NPM 관련 작업이 정말 편해져요. 삽질도 줄고, 실수도 줄고, 같이 일하는 사람들도 좋아하고.

mynpm 만들어서 직접 써보세요. 쓰다 보면 진짜 왜 안 진작 썼을까 싶을 거예요. 팀원들에게 공유하면 “이거 만든 사람 누구야?” 소리 들을지도 몰라요 :)

 


 

자주 묻는 질문 (근데 다들 같은 고민 하더라고요)

Q: 다른 명령어는 못 써요?
A: 네, 이건 오직 npm만! 그게 오히려 안전해서 좋아요.

Q: npm 명령 여러 개 한 번에 실행하고 싶은데요?
A: 그럴 땐 bash -c 쓰거나 용도별로 컨테이너 나눠보세요. 전자보다 후자가 더 명확하더라고요.

Q: 이거 실무에서도 써도 돼요?
A: 개발 환경에서는 강추! 실무 배포용이면 추가 설정 좀 넣는 걸 추천해요.

 

반응형