Uitility Containers

EBAB!·2023년 7월 15일
0

Docker

목록 보기
13/15

이때까지 다룬 컨테이너의 구조는 컨테이너 내부에 환경이 담겨져있고 그곳에 우리의 앱을 넣는 구조였습니다.

여기서 설명하게될 유틸리티 컨테이너는 앱을 담는것이 아닌 특정 환경만 포함하는 컨테이너를 뜻합니다. 만약 우리가 npm 명령어를 쓰려면 node.js가 설치되어 있어야 합니다. 하지만 호스트에는 설치하지 않으면서 npm을 사용하고 싶을 때 유틸리티 컨테이너를 사용할 수 있습니다.

# [Dockerfile]

FROM node:14-alpine # 경량버전:alpine

WORKDIR /app

ENTRYPOINT ["npm"]
docker run -it -v [project_address_in_host]:/app image_name npm install
  • Dockerfile에서 node환경을 구축해줍니다.

  • 명령어를 통해 프로젝트 폴더와 바인드 마운트 해주면서 npm init의 결과를 호스트의 환경과 공유합니다.

  • ENTRYPOINTCMD와 비슷하지만 차이가 있습니다. CMD는 명령 순서가 docker run image_name [CMD 실행 위치]입니다. 즉, 이미지 생성 후 일어나는 명령어입니다.
    ENTRYPOINT는 실행되는 것이 아니라 이미지 이름 뒤에 입력하는 모든 명령어의 접두사로 ENTRYPOINT가 추가됩니다.
    docker run -it image_name init으로 실행하면 ENTRYPOINT가 'npm'이기 때문에 실제로는 npm init이 실행됩니다.


유틸리티 컨테이너는 한 개일지라도 docker-compose로 다루는 것이 편합니다.

# [docker-compose.yaml]

version: "3.8"
services:
  npm:
    build: ./
    stdin_open: true
    tty: open
    volumes:
      - ./:/app

이제 이 docker-compose.yaml을 실행할텐데 주의할 점이 있습니다.
이전 글에서 소개한 docker-compose up은 파일에 정의된 서비스를 불러오고 실행 상태를 유지합니다. 그래서 docker-compose exec을 통해 추가로 설정을 해주어야 합니다.

현재 상황은 유틸리티 컨테이너 하나만을 통해 호스트의 환경을 구축하고 종료할 컨테이너이므로 up을 사용하는건 맞지 않습니다.

그래서 yaml파일 내의 컨테이너 중 하나만 실행가능한 명령어로 실행합니다. docker-compose run --rm npm init으로 실행해줍니다.
단, docker-compose up과 달리 컨테이너 중지 시 자동 삭제가 디폴트가 아니므로 --rm을 추가해주어야 합니다.

이러면 npm init으로 명령어가 시작되고, 설정해줬던 npm install을 실행하고, 이 명령어를 통해 컨테이너 내부의 파일이 바인드된 외부 폴더로 실시간 작성이 됩니다.

이렇게 환경을 구축하도록 도와주는 컨테이너를 유틸리티 컨테이너라 합니다.

profile
공부!

0개의 댓글