인프런, 유데미/개발자를 위한 쉬운 도커
이미지와 컨테이너의 라이프사이클
5_hyun
2025. 5. 31. 21:40
반응형
이미지
소프트웨어의 실행법부터 알아보자
- 하드웨어 자원을 이용할 수 있게 해주는 OS가 필요
- 라이브러리나 패키지에 의존하여 실행 혹은 런타임 언어가 필요
- 개발자가 개발한 애플리케이션이나 다운로드 받은 소프트웨어가 필요
하지만 도커에서는 이런 과정 없이 이미지를 실행함.
어떻게 가능한걸까?
- 예를 들어 Nginx 이미지를 실행하면, 이미지를 통해서 컨테이너를 실행했기 때문
- 이미지는 파일 시스템의 특점 시점을 저장해 놓은 압축 파일임
- 이미지는 소프트웨어가 실행되기 위해 필요한 모든 것들을 미리 준비해서 압축
- 따라서 이미지를 다운 받아서 OS의 격리된 공간에서 컨테이너가 실행되는 것
-이미지의 특성
- 이미지는 운영 체제의 백업 기능(스냅샷)과 유사하다.
- 언제든지 해당 시점의 소프트웨어를 실행할 수 있기 때문이다.
- 하지만 이미지는 백업 기능이나 스냅샷보다 크기가 작음
- 따라서 인터넷을 통해서 저장하고 공유하기 수월하다.
이미지와 컨테이너
- 이미지는 프로그램, 컨테이너는 프로세스라고 생각하면 된다.
- 이미지는 디스크를 차지, 컨테이너는 메모리와 CPU를 점유
- 격리된 공간에서 이미지에서 사전에 지정해 둔 프로그램이 프로세스로 실행
- 하나의 이미지로 여러 개의 컨테이너 실행 가능
이미지와 메타데이터
- 이미지 메타데이터는 이미지가 실제로 압축된 데이터
- 메타데이터는 이미지의 데이터를 기록하는 데이터(이미지의 이름, 아이디, 사이즈 등등)
- 메타데이터에는 env, cmd를 주로 봐야 함,
- env는 애플리케이션이 사용하는 환경 설정 값이며 key=value 형식, 소프트웨어 정보나 프로그램을 실행할 때 필요한 파일 경로 같은 정보가 포함, 즉 소프트웨어가 사용할 설정 정보
- cmd는 이미지를 컨테이너로 실행 시 명령어를 지정할 수 있다. 이미지를 컨테이너로 실행할 때 CMD에 있는 명령어를 통해서 어떤 프로그램을 실행할지를 메타데이터에서 결정
- 즉, 이미지의 압축 파일과 메타데이터를 사용해서 컨테이너가 만들어짐
- 메타데이터는 컨테이너를 실행할 때 새로운 값으로 덮어쓸 수 있음
- 따라서 이미지 안에 있는 다른 프로그램을 실행할 수도 있음
컨테이너의 라이프사이클
- create
- 이미지를 컨테이너로 만들 수 있음
- 컨테이너를 실행하기 위한 격리된 공간이 만들어지는 상태
- 네트워크, 스토리지, 환경 변수 같은 모든 리소스가 격리된 공간인 컨테이너로 분리된 상태
- 하지만 생성 단계에서는 내부에서 프로세스를 실제로 실행하지 않기 때문에 호스트 OS의 CPU와 메모리를 사용하지 않음
- 컨테이너 메타데이터의 cmd와 env 명령어를 사용해서 컨테이너를 러닝 상태로 만들 수 있음
- running
- 컨테이너에서 프로세스가 실행 중이라는 것을 의미
- 호스트 OS의 CPU와 메모리를 사용
- 실행 중인 프로세스에 종료나 재시작 신호를 보내면 보내면 10초 뒤에 명령 수행
- paused
- 컨테이너에서 실행 중인 모든 프로세스가 일시 중지된 상태
- 일시 중지한다는 것은 현재의 상태를 모두 메모리에 저장해 두는 것
- CPU는 사용하지 않고, 메모리만 사용
- unpause 명령어를 사용하면 프로세스를 일시 정지한 시점부터 재시작 가능
- stopped
- 컨테이너에서 실행 중인 프로세스를 완전히 중단시켰다는 것을 의미
- 메모리와 CPU 사용이 모두 중단
- 종료된 컨테이너를 다시 시작하면 프로세스가 처음부터 다시 실행
- deleted
- rm 명령어를 이용해서 삭제 가능
- 실행 중인 컨테이너를 삭제하려면 -f 옵션을 사용해야 함
-출처
이미지 레지스트리 실습 | 개발자를 위한 쉬운 도커
이미지 레지스트리 실습
www.inflearn.com
반응형