Docker -i, -t, -d 옵션

2025. 6. 16. 15:57·Docker

-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
'Docker' 카테고리의 다른 글
  • Docker - RUN, CMD, ENTRYPOINT, EXPOSE 명령어 차이
  • Docker - 애플리케이션과 Apache 서버 이미지 만들기
  • Docker - Dockerfile을 이용한 도커이미지 빌드
  • Docker - 설치 & 컨테이너 실행
jaeon.cloud
jaeon.cloud
  • jaeon.cloud
    JEONG JAE ON
    jaeon.cloud
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Docker (8)
      • Cloud (7)
      • AWS (14)
      • Network (9)
      • Linux (1)
      • Python (7)
      • Javascript (3)
      • React (5)
      • Project (3)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    lambda
    docker
    kubernetes
    AWS
    클라우드
    react
    네트워크
    http
    3-tier Architecture
    Python
    cors
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jaeon.cloud
Docker -i, -t, -d 옵션
상단으로

티스토리툴바