코딩과로그
[기록용] util용으로 도커 사용하기 (dockerfile에서 명시된 cmd외 다른 명령을 실행시키고 싶을 때) 본문
본인 실습내용 정리 깃헙 : 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:
'Docker' 카테고리의 다른 글
[기록용] Multi-Stage Build (feat: Frontend 배포) (0) | 2023.04.04 |
---|---|
[기록용] 도커를 통한 배포 및 EC2 와 ECS의 차이점 (0) | 2023.04.02 |
[기록용] 도커 컴포즈 명령어 정리 (ing) (0) | 2023.03.31 |
[기록용] 도커 컴포즈 파일 정리 (0) | 2023.03.31 |
[기록용] 도커 네트워크 연결 (0) | 2023.03.31 |