-i, -t, -d 옵션
- -i : 호스트의 표준 입력을 컨테이너와 연결 (interactive)
- -t : TTY 할당 (호스트의 쉘을 컨테이너에 연결)
- -d : 컨테이너를 detach 모드로 실행
쉘을 실행하는 컨테이너 (예: ubuntu)
- -i / -t 옵션 없이 Ubuntu 컨테이너 실행
- 기본 실행 명령어: /bin/bash
- /bin/bash는 터미널(TTY)이 없으면 자동 종료됨
- 따라서 컨테이너는 바로 종료됨 (쉘 실행 실패)
- 그래서 아무 일도 안 일어난 것처럼 보이고, 윈도우 프롬프트가 바로 돌아옴
- -i : 입력을 컨테이너와 연결
- -t : 가상 터미널(TTY)을 할당 => bash 실행 가능
- Ubuntu 컨테이너 안으로 들어옴 (bash 실행됨)
윈도우 프롬프트로 변경
- bash 종료 → 컨테이너도 종료됨
- 윈도우 프롬프트로 돌아옴
- -it: bash 실행용 인터랙티브 환경
- 이후 detach 하기 위해 ctrl + p + q 입력(컨테이너 종료하지않고 빠져나옴) -> 윈도우 프롬프트로 이동
- -i: 호스트 입력을 컨테이너에 연결 (interactive)
- -t: TTY 할당 → bash 쉘 실행 가능
- -d: detach 모드, 백그라운드에서 실행됨
쉘을 실행하지 않는 컨테이너
-d 없이 실행 (기본: attach 모드)
- -i, -t, -d 아무 옵션 없이 실행
- 이미지 안에서 실행된 명령어: go run /docker/go/main.go (추정)
- 로그 출력이 바로 사용자 콘솔로 연결됨 (attach 모드)
- 서버가 시작되었고, stdout이 콘솔에 바로 출력됨
- 입력은 안 받음 (bash가 아니니까)
- ctrl + c를 누르면 SIGINT 신호가 전송되어 서버 프로세스를 종료할 수 있음
- 컨테이너 내부로 들어간다고 이해하면 됨
-d 옵션 사용 (detach 모드)
- 컨테이너는 백그라운드에서 실행됨
- 사용자는 아무 것도 안 보고, 바로 프롬프트로 돌아옴
- 로그는 표시되지 않음, 대신 docker logs로 확인해야 함
- 종료는 docker stop <컨테이너명>으로 수동 처리
-it + Ctrl + C → 컨테이너 종료
- -it 옵션으로 컨테이너 안에 연결됨 (go run main.go 실행 중)
- Ctrl + C 입력하면 → SIGINT 신호 전송 → 실행 중인 서버 종료
- 컨테이너도 함께 종료됨 (Exited(1))
-it + Ctrl + P + Q → 컨테이너 분리(detach)
- -it 옵션으로 컨테이너에 연결되어 실행됨
- 하지만 Ctrl + P + Q 입력 → 컨테이너는 계속 실행 중
- 대신 사용자 콘솔만 빠져나와 detach 상태
쉘이 제공되지 않는 컨테이너 ⇒ exec ... /bin/bash
- -d: 백그라운드 실행
- --rm: 종료되면 자동 삭제
- 컨테이너가 bash를 포함하고 있다면 진입 가능
- 이때 bash는 go run과는 별개의 프로세스로 실행됨
- /bin/bash는 exec로 들어온 bash(PID 1542)
쉘이 제공되는 컨테이너
방법1. attach
- /bin/bash가 PID 1번 프로세스로 실행됨 (컨테이너의 메인 프로세스)
- 직접 컨테이너 안에 들어가서 명령 실행 가능
- exit 시 PID 1번 bash 종료 → 컨테이너 전체가 종료됨
- --rm 덕분에 컨테이너도 삭제됨
- /bin/bash가 PID 1번 프로세스로 실행 중
- attach로 컨테이너 안에 들어가 명령 실행 가능
- Ctrl + P + Q 입력 시:
- 사용자는 빠져나오지만,
- PID 1번 bash는 종료되지 않음
- → 컨테이너는 계속 실행 중
방법2. exec ... /bin/bash
- 원래 /bin/bash가 PID 1번으로 이미 실행 중
- exec로 또 하나의 /bin/bash (PID 9번) 추가 실행
- 메인 bash(PID 1)는 살아 있어서 컨테이너는 계속 실행 중
'Docker' 카테고리의 다른 글
Docker - 데이터 관리(Volume, Bind Mount) (1) | 2025.06.18 |
---|---|
Docker - RUN, CMD, ENTRYPOINT, EXPOSE 명령어 차이 (0) | 2025.06.17 |
Docker - 애플리케이션과 Apache 서버 이미지 만들기 (0) | 2025.06.17 |
Docker - Dockerfile을 이용한 도커이미지 빌드 (0) | 2025.06.16 |
Docker - 설치 & 컨테이너 실행 (0) | 2025.06.16 |
Docker 개념 (0) | 2025.06.16 |