: 컨테이너 이미지를 실행하는 데 필요한 소프트웨어 패키지
▶ 컨테이너라는 환경을 만들어주는 것.
- 독립성과 격리
: 도커 컨테이너는 호스트 시스템에서 실행되는 프로세스와 격리된 환경을 제공
▶컨테이너가 자체 파일 시스템, 네트워크 인터페이스, 프로세스 공간 등을 가지고 있어 마치 가상 머신처럼 독립적으로 실행 가능- 이식성
: 도커 컨테이너는 어디서든 실행될 수 있는 포괄적인 환경을 제공 → 이식성 높임
▶컨테이너가 필요한 모든 종속성과 환경 설정을 포함하고 있기 때문에 특정 환경에 대한 의존성을 줄임- 가상화 수준
: 도커 컨테이너는 일반적으로 운영 체제 수준에서 가상화 제공
▶호스트 시스템의 커널을 공유하지만 파일 시스템 및 네트워크를 격리하는 것을 의미
▶실제 프로세스 : 운영 체제 수준의 가상화를 사용하지 않고 호스트 시스템에서 직접 실행- 리소스 관리
: 도커 컨테이너는 리소스 사용량을 제어/관리하는데 있어서 더 많은 유연성 제공
▶컨테이너는 메모리, CPU 등의 리소스를 할당/제한 가능
▶실제 프로세스 : 리소스 제어가 더 제한적일 수 있음- 관리 및 배포 용이성
: 도커 컨테이너는 이미지를 사용하여 프로세스 포장/배포 가능
▶애플리케이션을 더 쉽게 관리하고 확장할 수 있도록 도움
▶실제 프로세스 : 배포 및 관리 작업이 더 복잡할 수 있음
가상 머신 : 물리적인 하드웨어를 가상화하는 기술
: 기존의 서버에 하이퍼바이저를 설치, 그 위에 가상 OS와 APP를 패키징한 VM을 만들어 실행하는 방식인 하드웨어 레벨의 가상화 지원
- 한 개의 서버를 여러 개의 서버처럼 활용 가능
- 환경 시작에 걸리는 오버헤드가 커지기 때문에 무겁고 느림.
- 도커보다 고립성 좋음.- 도커 컨테이너 : 하드웨어 에뮬레이션 없이 리눅스 커널을 공유해서 바로 프로세스를 진행
도커 : 프로세스의 실행 환경을 가상화
컨테이너
: 애플리케이션 레벨에서 필요한 소스코드와 관련 라이브러리들을 하나로 패키징하여 별도의 실행 환경을 만든 것
: 운영체제를 제외한 나머지 애플리케이션 실행에 필요한 모든 파일을 패키징한다는 점에서 OS레벨 가상화 지원
- 여러 개의 컨테이너가 동일한 호스트에서 커널을 공유하며 실행
- 커널 공유하지만 개별적인 '사용자 공간'(user space)가짐
- 커널 자체적으로 가지지 않음(공유만 함)
- 가볍고 실행 시 적은 리소스 사용
▶보안적으로 가상머신이 더 안전 : 도커 컨테이너는 커널을 공유하기 때문
▶리소스를 가상화하고 고립화 시키는 측면에서는 동일
<커널의 기능>
1. 프로세스 관리 : 프로세스 및 스레드 생성/삭제, 스케줄링
2. 파일 관리 : 디스크 상의 파일 관리
3. 메모리 관리 : 메인 메모리를 효과적으로 사용하기 위해 관리
4. 통신 관리 : 네크워크를 통해 정보를 주고 받을 수 있도록 관리
5. 주변 장치 관리 : 입출력 장치를 사용할 수 있도록 관리
<추가 개념>
- 프로세스 (Process)
: 실행 중인 프로그램
즉, 컴퓨터에서 실행되는 프로그램이 메모리에 로드되어 실행되고 있는 상태
▶각각의 프로세스는 프로그램의 인스턴스로, 각각의 프로세스는 독립적인 메모리 공간을 할당받아 실행
▶각자의 실행 상태, 메모리 할당, 파일 및 자원 사용 등을 관리
▶각 프로세스는 다른 프로세스와 독립적으로 실행되며, 다른 프로세스의 영향을 받지 않음.
- 런타임 (Runtime)
: 프로그램이 실행되는 동안의 시간
즉, 프로그램이 시작되어 종료될 때까지의 시간 동안
▶일반적으로 런타임은 컴퓨터 프로그램이 실행되는 동안에 발생하는 모든 동작을 포함
▶프로그램이 메모리에 로드되고 실행되는 동안의 모든 활동
▶컴퓨터 시스템이나 특정 프로그래밍 환경에서 프로그램이 실행되는 동안에 발생하는 이벤트와 작업을 다루는 시간적 개념
- 라이브러리 (Library)
: 프로그래머가 개발하는 소프트웨어에 사용할 수 있는 코드의 모음
▶코드 모음에는 함수, 클래스, 메서드 등이 포함될 수 있음
▶보통 컴파일된 형태로 제공되며, 개발자는 필요할 때 이를 프로그램에 링크하여 사용
▶코드 재사용성 ↑
▶개발 시간 ↓
- 런타임 라이브러리 (Runtime Library)
: 프로그램이 실행될 때 필요한 라이브러리
▶프로그램의 실행 중에 호출되어 사용
▶주로 프로그램이 실행될 때 동적으로 로드되며, 실행 중에 필요한 기능을 제공
EX. 메모리 할당 및 해제, 파일 입출력, 네트워크 통신과 같은 기본적인 작업을 수행하는 함수들이 포함될 수 있음
출처
https://fvor001.tistory.com/89
https://spaghetti-code.tistory.com/35
https://www.44bits.io/ko/post/is-docker-container-a-virtual-machine-or-a-process
https://m.blog.naver.com/appeal7712/221657263538