컨테이너가 실행될 때 자동으로 실행되는 기본 명령어를 의미
nginx 의 엔트리포인트는 Nginx 서버 실행 명령어인,
(nginx -g 'daemon off;')로 설정되어 있는데
--entrypoint 옵션을 사용하면 이를 덮어쓰고 다른 명령어를 실행할 수 있다
docker run --entrypoint ls nginx
nignx 컨테이너를 실행하지만
원래 nginx 이미지의 기본 ENTRYPOINT(Nginx 실행)가 아닌
ls 명령어를 실행하도록 덮어쓰는 것
컨테이너가 실행되면서 ls 명령어가 실행되고, nginx 컨테이너 내부의 루트 파일 목록이 출력
그 후 컨테이너는 추가적인 프로세스 없이 종료
근데 이렇게 하면 기본 엔트리포인트는 작동 ❌
도커 컨테이너 실행 시 ENTRYPOINT를
ls로 변경하여 Nginx 서버가 아닌 파일 목록을 출력하고 바로 종료하는 효과
인터렉션(Interaction)이란 사용자가 시스템과 상호작용(입력과 출력)하는 것을 의미
즉, 명렁을 입력하면 즉각적으로 응답을 받을 수 있는 방식
인터렉티브 모드(Interactive Mode)는 이런 상호작용이 필요한 프로그램을
실행하는 방식으로,
터미널에서 직접 명령을 입력하고 실행할 수 있도록 해준다.
docker run -it --entrypoint bash nginx
nginx 컨테이너를 실행하지만, 원래의 엔트리포인트(기본적으로 Nginx 실행)가 아님
bash(셸)를 실행하도록 ENTRYPOINT를 덮어씀
-it 옵션을 사용하여 인터렉티브 모드로 실행함
옵션 설명
-i : 표준 입력(STDIN)을 활성화하여 입력을 받을 수 있도록 함
-t : 터미널을 할당하여 셸 환경을 제공함
이 명령을 실행하면
nginx컨테이너 안에서bash셸이 실행되며, 사용자는 직접 명령을 입력 할 수 있다.
bash에서 나가는 방법
exit
또는 Ctrl + D
그래서 정리하자면
인터렉션(Interaction) : 사용자와 시스템 간의 상호작용 (입력 → 실행 → 출력)
인터렉티브 모드(Interactive Mode) : 사용자가 직접 명령어를 입력하고
실행할 수 있는 모드
-it 옵션: 도커 컨테이너에서 인터렉티브 모드로 실행할 때 사용
ENTRYPOINT를 bash 로 변경 : 기본 실행 명령을 Nginx가 아닌 Bash 셸로 변경하여 직접 명령을 입력할 수 있도록 함
도커 컨테이너의 생명주기를 결정하는 주 프로세스를 생성하는 명령어를 최종 실행 명령어라 하는데
최종 실행 명령어는 엔트리포인트 + 명령어로 이루어짐
최종 실행 명령어 = ENTRYPOINT + CMD
CMD : ENTRYPOINT에 전달되는 기본 인자(명령어)
각 옵션은 도커 이미지 실행시에 재지정이 가능
1. 도커 이미지의 전체 정보 확인
docker inspect nginx
nginx 이미지의 모든 정보를 JSON 형식으로 출력
환경 변수, 네트워크 설정, ENTRYPOINT, CMD, 볼륨 등 다양한 정보 포함
2. 기본 엔트리포인트(ENTRYPOINT) 확인
docker inspect nginx | grep -A 1 '"Entrypoint"'
nginx 이미지의 ENTRYPOINT 값을 확인
grep -A 1 옵션은 "Entrypoint" 라는 키를 찾고, 그 다음 줄까지 출력
3. 기본 명령어(CMD) 확인
docker inspect nginx | grep -A 4 '"CMD"'
nginx 이미지의 CMD 값을 확인
grep -A 4 옵션은 "CMD" 라는 키를 찾고, 그 다음 4줄까지 출력
쉽게 말하면
컨테이너가 실행될 때 기본적으로 실행되는 명령어(ENTRYPOINT + CMD)가 있다
docker inspect 명령어로 도커 이미지의 세부 정보를 확인할 수 있음
grep 을 사용하면 필요한 정보(ENTRYPOINT, CMD)만 골라서 볼 수 있음
첫번 째 명령어 : docker run nginx
docker run nginx
docker run nginx "nginx" "-g" "daemon off;"
docker run --entrypoint ./docker-entrypoint.sh nginx
./docker-entrypoint.sh "nginx" "-g" "daemon off;"
./docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
./docker-entrypoint.d/15-local-resolvers.envsh
./docker-entrypoint.d/20-envsubst-on-templates.sh
./docker-entrypoint.d/30-tune-worker-processes.sh
nginx -g "daemon off;"
두번 째 명령어 : docker run nginx ls -al
docker run nginx ls -al
docker run --entrypoint ./docker-entrypoint.sh nginx ls -al
./docker-entrypoint.sh "ls" "-al"
ls -al
--rm 옵션 없이 실행:--rm 옵션 사용 시:# --rm 옵션 없이 hello-world 컨테이너 실행
docker run hello-world
docker ps -a
docker rm blissful_morse # 기존 도커 컨테이너 제거
docker run --rm hello-world
# 컨테이너 실행 후, 자동으로 삭제되어 목록에 나타나지 않음
docker ps -a
# (종료된 hello-world 컨테이너가 존재하지 않음)
1. 컨테이너 중지
docker stop 컨테이너 ID 또는 컨테이너 이름
실행 중인 컨테이너를 중지(stop) 시키는 명령어
주로 백그라운드에서 실행된 컨테이너를 종료할 때 사용
2. -d 옵션 (백그라운드 실행)
도커 컨테이너를 실행할 때, -d 옵션을 사용하면 실행 방식이 달라짐
✅ -d 옵션 사용 (Detach 모드, 백그라운드 실행)
docker run -d nginx
백그라운드에서 실행, 터미널 점유 ❌
실행한 후에도 터미널에서 다른 작업 가능
예: nginx 웹 서버를 계쏙 실행하면서 터미널을 자유롭게 사용 가능
✅ -d 옵션 미사용 (Foreground 모드, 포그라운드 실행)
docker run nginx
포그라운드에서 실행, 터미널 점유 ⭕
실행한 컨테이너의 출력이 터미널에 직접 표시
컨테이너가 종료될 때까지 터미널 사용 ❌
쉽게 말해
docker stop → 실행 중인 컨테이너를 중지하는 명령어
-d 옵션 → 컨테이너를 백그라운드에서 실행할지(Foreground vs. Background)
결정하는 옵션
-d 사용하면 백그라운드 실행, 터미널에서 자유롭게 다른 작업 가능
데몬(서비스) 형태의 실행에 적합
-d 없으면 포그라운드 실행, 컨테이너가 끝날 때까지 터미널 점유
로그를 실시간으로 확인 가능
1. name 옵션 (컨테이너 이름 지정)
docker run --name my-nginx -d nginx
--name my-nginx : 컨테이너 이름을 my-nginx로 지정
컨테이너 ID 대신 이름으로 컨테이너를 관리할 수 있음
컨테이너 이름은 유일해야 한다(Unique) 같은 이름 ❌
2. docker logs (컨테이너 로그 확인)
도커 컨테이너가 실행되면서 생성하는 출력(stdout)과 에러(stderr) 로그를 확인하는 명령어
✅ 기본 로그 조회
docker logs my-nginx
my-nginx 컨테이너의 실행 로그를 출력
백그라운드에서 실행되는 컨테이너의 상태를 확인하거나 디버깅할 때 유용
✅ -f 옵션 (실시간 로그 확인)
docker logs -f my-nginx
로그를 실시간으로 모니터링 (새로운 로그가 생성될 때 계속 출력)
웹 서버(Nginx, Apache)나 애플리케이션 로그를 실시간으로 확인할 때 사용
✅ --timestamps 옵션 (타임스탬프 포함)
각 로그에 타임스탬프(날짜, 시간) 포함
로그 발생 시간을 확인하여 문제 발생 시점을 파악할 때 유용
쉽게 말해
--name 옵션 → 컨테이너에 고유한 이름을 지정할 수 있음
docker logs 컨테이너 이름 → 실행 중인 컨테이너의 로그를 확인
-f 옵션 → 실시간 로그 모니터링 (새로운 로그 자동 표시)
--timestamps 옵션 → 로그에 시간 정보를 추가하여 언제 발생한 로그인지 확인 가능
1. docker start
이전에 실행되었다가 중지된 컨테이너를 다시 실행할 때 사용
기본 동작 (Detach 모드, 백그라운드 실행)
docker start 컨테이너 이름
중지된 컨테이너를 다시 실행하지만, 터미널에 출력이 나타나지 않음
백그라운드(Detach 모드)에서 실행됨
즉, 실행되긴 하지만 아무런 출력이 보이지 않고, 터미널에서 다른 작업이 가능
docker start hello-world
hello-world 컨테이너가 다시 실행되지만, 실행 결과는 터미널에 표시 ❌2. -a 옵션 (Attach)
docker start -a 컨테이너 이름
중지된 컨테이너를 다시 실행하면서, 표준 출력(stdout)과 표준 에러(stderr)를
터미널에서 바로 확인 가능
즉, 컨테이너의 실행 결과나 메시지를 직접 볼 수 있음
docker start -a hello-world
hello-world 컨테이너를 다시 실행하고, 실행 결과를 터미널에서 확인 가능
hello-world 컨테이너는 실행 후 자동으로 종료되므로, 실행 메시지가 표시된 후 종료
쉽게 말해
docker start 컨테이너 이름 → 컨테이너를 다시 시작하지만, 백그라운드에서 실행되므로 터미널에 출력이 보이지 않음
docker start -a 컨테이너 이름 → 컨테이너를 다시 시작하면서, 출력 내용을 터미널에서 바로 확인 가능
1. docker stop (안전한 종료)
docker stop 컨테이너 이름
컨테이너에 SIGTERM 신호를 보내 정상적으로 종료할 기회를 줌
내부 프로세스가 정리할 시간을 가질 수 있음
일정 시간 내 종료되지 않으면 자동으로 SIGKILL 을 보내 강제 종료
데이터 손실을 방지하면서 안전하게 종료하고 싶을 때 사용
✅ 예제
docker stop my-containor
my-containor 를 정상적으로 종료2. docker kill (즉시 강제 종료)
docker kill 컨테이너 이름
컨테이너에 SIGKILL 신호를 보내 즉시 강제 종료
정상 종료 기회 없이 즉각적으로 프로세스를 중단
내부 작업이 진행 중이더라도 강제 종료되므로 데이터 손실 위험이 있음
프로세스를 빠르게 중단해야 할 때 사용
✅ 예제
docker kill my-containor
my-containor 를 즉시 종료3. docker rm -f (강제 삭제)
docker rm -f 컨테이너 이름
실행 중인 컨테이너를 강제 삭제
내부적으로 docker kill 을 실행한 후 컨테이너를 제거
실행 중인 컨테이너를 강제 종료하고 삭제까지 한 번에 진행
✅ 예제
docker kill my-containor
my-containor 를 강제 종료하고 삭제docker stop → 정상적으로 종료하려면 이걸 사용!docker rm -f → 실행 중인 컨테이너를 종료하고 삭제까지 하려면 이걸 사용!1. 환경변수(Enovironment Variables)란?
컨테이너 실행 시 외부에서 설정값을 전달할 수 있도록 하는 기능
데이터 베이스 연결 정보, API 키, 애플리케이션 설정 등을 하드코딩하지 않고 환경변수로 관리 가능
보안성 및 유연성 증가 (코드 변경 없이 설정 변경 가능)
2. 컨테이너 실행 시 환경변수 지정 방법
✅ -e 옵션 (개별 환경변수 설정)
docker run -e MY_VAR=HelloDocker nginx
MY_VAR=HelloDocker 환경변수를 컨테이너에 전달
컨테이너 내부에서 MY_VAR 값을 사용할 수 있음
✅ --env-file 옵션 (여러 개 환경변수 한 번에 설정)
docker run --env-file env.list nginx
env.list 파일에 정의된 여러 개의 환경변수를 한 번에 적용
파일 내용 예시 (env.list)
```ini
MY_VAR=HelloDocker
APP_ENV=production
```
3. Dockerfile 에서 환경변수 설정 (ENV 명령어)
# Dockerfile 예제
FROM ubuntu
ENV MY_VAR=HelloDocker
ENV MY_VAR=HelloDocker → 기본값 설정
실행 시 -e 옵션으로 값을 변경하지 않으면 기본값으로 적용
✅ 실행 예시
docker build -t my-image .
docker run my-image
MY_VAR 값이 HelloDocker 로 설정됨
실행 시 docker run -e MY_VAR=NewValue my-image 하면 값 변경 가능
4. 준비 스크립트 설명 (env.list 파일 생성 과정)
rm -rf ~/testDockerProjects/exam19 # 기존 폴더 삭제
mkdir -p ~/testDockerProjects/exam19 # 새 폴더 생성
cd ~/testDockerProjects/exam19 # 해당 폴더로 이동
echo MY_VAR=HelloDocker > env.list # 환경변수 파일 생성 (MY_VAR)
echo APP_ENV=production >> env.list # 추가 환경변수 설정 (APP_ENV)
exam19 폴더를 새로 만들고 env.list 파일 생성
env.list 에는 MY_VAR=HelloDocker , APP_ENV=production 값이 저장
이후 --env-file env.list 옵션을 사용하여 컨테이너 실행 시 적용 가능
-e 옵션 → 한 개의 환경변수만 설정할 때 사용
-env-file 옵션 → 여러 개의 환경변수를 한 번에 설정할 때 사용!
ENV (Dockerfile) → 컨테이너 기본값을 설정하는 방법!
환경변수 사용하면 코드 수정 없이 설정을 쉽게 변경할 수 있음