-it 옵션)도커 컨테이너는 기본적으로 백그라운드에서 혼자 실행됨. 컨테이너 내부 터미널로 진입하여 직접 조작하고 싶을 때 -it 옵션을 사용함.
# 컨테이너 내부로 들어가기 (bash 셸 실행)
docker run -it --entrypoint bash nginx
# 컨테이너 내부에서 빠져나오기
exit
-i (Interactive): 사용자의 키보드 입력을 컨테이너 표준 입력(stdin)으로 전달함.-t (TTY): 가상 터미널을 할당하여 화면 출력 형식을 터미널 형태로 보여줌.--entrypoint bash: 이미지의 기본 엔트리포인트를 bash 셸로 교체하여 진입함.도커 컨테이너가 실행될 때 작동하는 최종 명령어는 Entrypoint와 Cmd의 조합으로 결정됨.
최종 실행 명령어 = Entrypoint + Cmd
# 이미지 전체 정보 확인
docker inspect nginx
# 엔트리포인트(설정 파일 등) 정보만 필터링
docker inspect nginx | grep -A 1 '"Entrypoint"'
# 기본 실행 명령어(Cmd) 정보만 필터링
docker inspect nginx | grep -A 4 '"Cmd"'
docker run [이미지명] [새로운 Cmd] 형태로 이미지명 뒤에 명령어 삽입 (예: docker run nginx echo "hello")--entrypoint 옵션을 명시하여 강제로 교체 (예: docker run --entrypoint bash nginx)docker-entrypoint.sh 스크립트의 역할컨테이너가 켜질 때 필요한 사전 준비 작업(환경 변수 설정, 초기화 등)을 마치고, 실제 메인 애플리케이션(nginx 등)에 바통을 넘겨주는 징검다리 역할을 함.
컨테이너 시작
↓
docker-entrypoint.sh 실행
↓
첫 번째 인자($1)가 "nginx"인가?
├── YES → /docker-entrypoint.d/ 내부 사전 준비 스크립트들 순차 실행
└── NO → 준비 작업 건너뜀
↓
exec "$@" 실행 → nginx에 프로세스 제어권 이양 (PID 1번 교체)
핵심 포인트: `exec "$@"
이 명령어를 통해docker-entrypoint.sh셸 스크립트 프로세스가nginx프로세스로 완전히 대체됨. 결과적으로nginx`가 PID 1(주 프로세스)을 가지게 되며, 이 PID 1번이 살아있는 동안 컨테이너가 유지됨.
docker run 작동 케이스 분석docker run nginx (기본 실행)docker run --entrypoint ./docker-entrypoint.sh nginx "nginx" "-g" "daemon off;"10-...sh, 15-...sh 등)가 정상 작동함.nginx -g "daemon off;"가 주 프로세스(PID 1)로 실행되어 컨테이너가 계속 유지됨.docker run nginx ls -al (Cmd 교체 실행)./docker-entrypoint.sh "ls" "-al" 호출.nginx가 아니므로 사전 준비 작업을 전부 건너뜀.ls -al이 실행되어 디렉토리 목록을 출력한 후, 주 프로세스가 종료되므로 컨테이너도 즉시 종료(Exited)됨.외부 인터넷이 차단된 폐쇄망(서버실 등) 환경에서는 docker pull을 통한 Docker Hub 접근이 불가능함. 이때 이미지를 파일 형태로 추출하여 이동시키는 방식을 사용함.
# [인터넷 가능 환경] 도커 이미지를 tar 파일로 저장
docker save nginx > nginx.tar
# [폐쇄망 환경] tar 파일로부터 도커 이미지 로드
docker load < nginx.tar
-it: 컨테이너 내부 터미널로 진입할 때 필수.exec "$@": 프로세스를 교체하여 메인 앱이 PID 1번을 갖게 만드는 핵심 문법.save / load: 인터넷이 안 되는 폐쇄망 배포의 방법.
최고의 개발자 윤하빈