코딩과로그

[기록용] util용으로 도커 사용하기 (dockerfile에서 명시된 cmd외 다른 명령을 실행시키고 싶을 때) 본문

Docker

[기록용] util용으로 도커 사용하기 (dockerfile에서 명시된 cmd외 다른 명령을 실행시키고 싶을 때)

피리음 2023. 4. 1. 14:54

util용 컴포넌트의 예시

 

본인 실습내용 정리 깃헙 : https://github.com/SangYunLeee/docker-practice/tree/main/docker-compose/util-docker

 

docker exec 커맨드를 통해서 실행중인 도커 컨테이너에서 추가적인 명령을 할 수 있다.

 

기존 컨테이너에서 추가 명령을 하고 싶을 때

# node-ct 라는 노드 환경의 컨테이너 생성 (-it 명령어를 통해서 node가 input을 받을 수 있는 상황을 만들어 꺼지지 않도록 함)
$ docker run -it -d --name node-ct node 
46c82275d428b5a6338e00f160003b8978333b1f0f570d7948f350691880fb33

# bash 명령어를 통해 리눅스에 접속
$ docker exec -it node-ct bash
root@46c82275d428:/#

컨테이너 생성 및 실행 시

# node 이미지는 기본적으로 node 명령어를 실행하도록 되어 있지만 이미지명 뒤에 명령어 삽입 시 default 명령어(CMD:["node"])가 오버라이드되어 덮어 씌워진다.
$ docker run -it node npm init

# 만약 dockerfile 에 ENTRYPOINT 가 붙어있다면,
덮어씌우는 명령어 앞에 ENTRYPOINT 멸령어가 앞에 붙는다.

# dockerfile
...
ENTRYPOINT ["npm"]
...
$ docker build -t my-node .

# npm init을 하기 위해 npm을 명려어에 추가하지 않아도 정상적으로 동작한다.
$ docker run -it my-node init

 

그러나 위의 식으로 사용해도 컨테이너에서만 변경사항이 적용될 뿐 호스트머신에는 반영되지 않는다. 

따라서 마운트를 진행해주어야 한다.

# 호스트의 현재 디렉토리를 컨테이너의 /app 디렉토리에 마운트한다.
$ docker run -it -v $(pwd):/app my-node init

 

이를 docker-compose.yaml로 추가 작성하면 docker compose 명령어로 컨테이너 실행 시의 옵션 설정을 최소한으로 할 수 있다.

# docker-compose.yaml
version: '3.8'
services:
  npm:
    build: ./
    stdin_open: true
    tty: true
    volumes:
      - ./:app
# 도커 컴포즈로 실행하는 방법
	# run 은 자동으로 컨테이너를 삭제하지 않으므로 --rm 옵션을 적용해 컨테이너 중지 시 자동으로 컨테이너를 삭제하도록 함.
$ docker compose run --rm my-npm init

refer:

https://www.udemy.com/course/docker-kubernetes-the-practical-guide/learn/lecture/22167140#questions/12977214/