Dev/Infra | Cloud

Docker | 비슷해보이지만 다른 기본적인 명령어들

vanss 2022. 11. 6. 00:08
본 글은 Docker에 대한 기본 개념과 심화 학습을 하면서 배운 내용들을 정리하기 위한 글입니다.
피드백은 언제든지 열려있으니 편하게 남겨주시면 감사하겠습니다. 🤩

 

Docker create / start / run / stop 명령어들의 컨테이너 생명주기

 

Docker에서 컨테이너와 관련된 create / run / start 명령어의 차이가 뭐예요? 

  • $ docker create는 새로운 컨테이너를 이미지로부터 생성하는 명령어입니다.
  • $ docker start는 기존에 중지되어있던 컨테이너를 실행 시키는 명령어입니다.
  • $ docker run은 새로운 컨테이너를 이미지로부터 생성하고, 실행시키시면서 컨테이너 내부로 들어가는 명령어입니다. 

 

Docker에서 컨테이너 중지와 연관된 stop / kill 명령어의 차이는요?

  • $ docker stop은 실행 중인 컨테이너를 중지하는 명령어입니다.
  • $ docker kill도 실행중인 컨테이너를 중지하는 명령어입니다.
  • 기능은 유사하지만 차이점은 멈추는 방식에서 차이 나는데요. stop은 sigterm을 사용해서 시스템 종료를 위해 프로세스가 정리하는 시간을 주고 나서 sigkill을 사용하여 컨테이너를 멈추지만, kill은 바로 sigikill으로 컨테이너를 멈추게 한다.
  • stop의 중지 로직 : docker stop > *SIGTERM > *SIGKILL > main process
  • kill의 중지 로직 : docker kill > SIGKILL > main process
    • *SIGTERM
      • 프로세스의 종료를 요청하기 위해 해당 프로세스에 전송되는 신호이며, SIGKILL과 다르게 프로세스가 차단하거나 무시할 수 있습니다. 그렇기 때문에 프로세스는 리소스를 해제 후 필요시 상태를 저장하는 일종의 정리하는 시간을 갖고 나서 종료를 할 수 있다. (SIGTERM < 프로세스)
    • *SIGKILL
      • 프로세스보다 강한 힘을 가진 신호로 프로그램을 즉시 종료하는데 쓰입니다. 프로세스가 차단하거나 무시할 수 없으므로 강압적이고 항상 치명적입니다. (SIGKILL > 프로세스)