어플리케이션 개발에 있어서 적용하는 프로그래밍 언어마다, 개발환경을 설정해주어야 한다. node 서버를 구현하기 위해서는 node.js 개발환경을 설정해주어야 하고, spring 프로젝트를 개발하기 위해서는 spring 개발환경을 설정해주어야 한다. 이러한 개발환경을 설정하는 것이 매번 번거롭기 때문에, 유틸리티 컨테이너를 통해 해당 개발환경이 미리 구성되어 있는 것과 같이 만들 수 있다.
docker exec
를 활용하여 도커 컨테이너 내부에서 명령어를 실행할 수 있다. 예를 들어, node 이미지를 기반으로 한 node.js 개발환경이 설치된 도커 컨테이너 내부에서 npm install
명령어를 실행할 수 있다. 이를 통해 개발환경 설정을 손쉽게 할 수 있다.
#도커 허브의 node image를 통해 컨테이너를 실행한 경우
docker exec -it [CONTAINER_NAME] npm init
혹은 컨테이너 실행 시, 필요한 개발환경 명령어를 입력하여 실행하는 것도 가능하다. 단 이 경우에는 해당 명령어 실행이 모두 완료되면 컨테이너를 종료시킨다.
#도커 허브의 node image를 통해 컨테이너를 실행한 경우
docker run -it [IMAGE_NAME] npm init
도커 파일에 CMD ["node","--version"]
의 명령어가 있는 경우, 컨테이너를 실행하면 노드의 버전이 출력된다. CMD
가 있음에도 우리가 만약 직접 명령어를 입력하는 경우, CMD
가 무시되고 직접 입력한 명령어가 수행된다. ENTRYPOINT
는 명령어가 무시되지 않고, 직접 입력한 명령어와 함께 수행된다. 물론 해당 실행이 완료되면 컨테이너는 항시 종료되니 주의 할 것.
#docker run test node
FROM node:14-alpine
WORKDIR /app
#CMD 의 node 생략됨
CMD [ "node", "--version" ]
#docker run test --version
FROM node:14-alpine
WORKDIR /app
#ENTRYPOINT는 이어서
ENTRYPOINT [ "node" ]
docker-compose
를 통해서도 유틸리티 컨테이너를 생성하는 것이 가능하다.
version: '3.8'
services:
npm:
build: ./
stdin_open: true
tty: true
volumes:
- ./:/app