본문 바로가기

개발공부/Docker & Kubernetes 실전 가이드 강의

Udemy : Docker & Kubernetes 실전 가이드 (7)

728x90

유틸리티 컨테이너

노드를 예로 들면 비어있는 프로젝트 폴더에서 npm init 명령어와 함께 package.json 생성 후 종속성 추가

~ 프로젝트를 생성하기 위해 호스트 머신에 설치해야하는 부가 도구를 도커화한 것이 유틸리티 컨테이너

 

1. 컨테이너에서 명령을 실행하는 다양한 방법

노드 공식 이미지를 docker run 하면 인터렉티브 모드가 아니기 때문에 중지된다.

docker run -it -d node

docker exec : 실행 중인 컨테이너 내 특정 명령을 실행할 수 있다.

~ 도커파일에 지정된 명령 외 특정 명령을 실행한다.

docker exec 실행 중인 컨테이너 이름 ~ ex) docker exec -it hopeful_spence npm init

- 계속 프로세스와 연결되려면 인터렉티브 모드여야 한다.

~ 실행 중인 컨테이너에서 프로젝트를 생성할 수 있다.

 

2. 유틸리티 컨테이너 빌드하기

cf) 공식 이미지 - 알파인 버전 : 내부적으로 조금 더 슬림한 운영체제를 사용한다.

- 컨테이너 이름 뒤에 npm init 명령어를 통해 종속성 추가

- 컨테이너를 실행하면 컨테이너 내부에 생성된 종속성이 호스트 머신의 프로젝트 폴더에도 미러링된다.

~ 호스트 머신에 필요한 모든 부가 도구를 직접 설치하지 않아도 도커가 컨테이너에 설치한 후 이를 로컬에 복사.

노드가 프로젝트에 필요하지만 로컬에 노드를 설치할 필요가 없다.

 

3. 엔트리 포인트 활용

유틸리티 이미지를 활용한 명령 내리기 : 컨테이너 실행 시 npm init이 아닌 npm install를 사용해 바인드 마운트로 연결된 컨테이너와 로컬의 콘텐츠가 한번에 삭제되는 것을 막을 수 있다.

- 실행할 수 있는 명령을 제한할 수 있는 Entry Point ~ CMD와 유사

-> 도커파일에서 ENTRYPOINT : 

docker run 이미지 이름 뒤에서 명령하면(유틸리티 컨테이너) 도커파일의 CMD를 덮어쓴다. 

엔트리포인트는 도커파일의 ENTRYPOINT에 입력된 내용이 docker run으로 실행 시 추가된다.

ex) docker run mynpm init : 도커파일에 엔트리포인트에 npm을 작성해둔 상태

+ express 입력 : express 패키지 종속성 추가

+ --save : 명시적 종속성 설치

 

~ 이 방식은 모든 명령어를 입력해야한다는 단점이 있다 ~ 도커 컴포즈 활용

 

4. 도커 컴포즈 활용

- docker compose up에는 Entrypoint 방식으로 명령을 입력할 수 없다.

-> 도커 컴포즈를 up한 뒤 docker compose run 또는 exec에서 유틸리티 명령을 입력할 수 있다.

docker compose run은 한번에 하나의 서비스를 대상으로 지정할 수 있다.

 

docker compose run 이후에는 up과 down이 아니므로 서비스가 자동으로 삭제되지 않는다.

~ run은 명령이 완료되면 서비스가 종료된다. ~ --rm으로 완료 후 삭제 가능

728x90