빠른 흐름
docker run --name web -d nginx:alpine # created → running
docker ps # 실행 중 확인
docker stop web # running → stopped
docker start web # stopped → running
docker rm web # 컨테이너 삭제기본 흐름
어떤 컨테이너 생명주기 명령을 먼저 떠올리면 되나
| 상황 | 먼저 떠올릴 선택 |
|---|---|
| 새 컨테이너 생성과 실행 | docker run |
| 중지된 컨테이너 재시작 | docker start |
| 실행 중 컨테이너에 명령 추가 실행 | docker exec |
| 상태 포함 전체 목록 확인 | docker ps -a |
| 컨테이너 완전 삭제 | docker rm |
컨테이너 상태 전이 — created, running, paused, stopped, removed 순서로 전이된다
컨테이너는 생성되면 created 상태가 되고, 실행되면 running이 됩니다. docker stop으로 중지하면 stopped(exited), docker pause로 일시 정지하면 paused 상태가 됩니다. docker rm은 컨테이너 자체를 삭제하며, 이후에는 docker ps -a에도 나타나지 않습니다. 이미지는 삭제되지 않습니다.
docker run --name demo -d nginx:alpine # running
docker pause demo # paused
docker unpause demo # running으로 복귀
docker stop demo # stopped (exited)
docker ps -a # 중지된 컨테이너도 표시
docker rm demo # 완전 제거run vs start vs exec — 세 명령이 각각 다른 시점에 쓰인다
docker run은 새 컨테이너를 만들어 실행합니다. docker start는 이미 존재하는 중지된 컨테이너를 다시 시작합니다. docker exec는 실행 중인 컨테이너 안에서 추가 명령을 실행합니다. 중지된 컨테이너에 exec는 할 수 없습니다.
# 새 컨테이너 생성 + 실행
docker run --name app -d my-app:latest
# 기존 중지 컨테이너 재시작
docker start app
# 실행 중인 컨테이너에서 셸 접속
docker exec -it app /bin/shstop의 동작 방식 — SIGTERM → 타임아웃 → SIGKILL 순서로 종료한다
docker stop은 컨테이너의 PID 1 프로세스에 SIGTERM을 보내 정상 종료를 유도합니다. 기본 10초(타임아웃) 안에 프로세스가 종료되지 않으면 SIGKILL을 보내 강제 종료합니다. 애플리케이션이 SIGTERM을 제대로 처리하면 열린 커넥션을 정리하고 graceful하게 종료할 수 있습니다. --rm 플래그는 컨테이너가 종료될 때 자동으로 삭제합니다.
# 타임아웃 30초로 변경
docker stop --time 30 app
# 강제 종료 (SIGKILL 즉시)
docker kill app
# 종료 시 자동 삭제 (임시 컨테이너에 유용)
docker run --rm -it alpine shstop과 rm은 역할이 다르다 — 중지와 삭제를 같은 작업으로 보면 안 된다
docker stop은 컨테이너를 멈추기만 하고, docker rm은 중지된 컨테이너 자체를 지웁니다. 테스트를 잠깐 멈췄다가 다시 띄울 계획이면 stop 후 start를 쓰고, 같은 상태를 다시 쓸 필요가 없으면 rm으로 정리합니다. docker run --rm은 종료와 동시에 삭제하는 일회성 실행에 맞습니다.
# 상태를 남겨 두고 다시 시작할 예정
docker stop web
docker start web
# 상태를 버리고 새로 만들 예정
docker stop web
docker rm web
docker run --name web -d nginx:alpine체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 새 컨테이너를 만들어 실행 | docker run |
| 중지된 컨테이너를 다시 실행 | docker start |
| 실행 중 컨테이너에서 명령 실행 | docker exec |
| 테스트 후 자동 삭제 | docker run --rm |
| 상태 포함 완전 초기화 | docker rm + docker run |
주의할 점
docker run은 항상 새 컨테이너를 만든다. 같은 이름으로 반복 실행하면 이름 충돌 오류가 발생하며, 이전 컨테이너에 쌓인 데이터나 로그는 새 컨테이너에 이어지지 않는다. 상태를 유지한 채 재시작하려면 docker start를 써야 하고, 데이터를 유지하려면 volume을 사용해야 한다.
# 일회성 실행이라 --rm을 붙였는데 나중에 다시 start하려는 경우
docker run --rm --name temp nginx:alpine
# 컨테이너 종료와 함께 temp는 삭제됨
docker start temp
# Error: No such container: temp참고 링크
2 sources