프로그램을 실행하는데 필요한 시스템 소프트웨어
하드웨어, 소프트웨어 자원을 관리하고 이를 위해 스케줄링 기능과 프로그램이 실행될 수 있는 환경을 제공
실행 가능한 명령어의 집합
하드디스크와 같은 저장 장치에 저장, 메모리에는 올라가지 않은 정적인 상태
실행 중인 프로그램
RAM(메모리)에 존재하는 동적인 상태의 프로그램
멀티 프로세스: 디스크에 존재하는 프로그램을 여러 번 실행하여 여러 개의 프로세스를 작동시키는 것
프로세스가 할당받은 자원을 이용하는 실행 단위 = 프로세스 내에 실행되는 여러 흐름의 단위
프로세스는 최소 한 개 이상의 스레드를 가지며, 이 기본 스레드가 메인 스레드이다
프로세스가 스레드의 컨테이너 역할을 하며, 스레드의 정보를 담고 있다
프로세스를 실행할 때 시스템 리소스를 분리해서 실행할 수 있도록 도와주는 기능
| pid: Process ID | 리눅스 커널의 프로세스 ID 분리 |
|---|---|
| net: Networking | 네트워크 인터페이스 관리 |
| ipc: Inter Process Communication | 프로세스 간 통신 접근 관리 |
| mnt: Mount | 파일 시스템의 마운트 관리 |
| uts: Unix Timesharing System | 커널과 버전 식별자 관리 |
2008년 설립된 DotCloud라는 회사에서 2013년 PaaS 형태로 출시된 소프트웨어
호스트의 OS 커널을 공유할 수 있도록 효율적으로 쪼개어 (가상화), 프로그램이 어디서든 잘 돌아가도록
코드를 하나의 이미지로 묶어 (컨테이너) 쉽게 배포할 수 있게 도와주는 도구
| 구분 | IaaS (Infrastructure) | PaaS (Platform) | SaaS (Software) |
|---|---|---|---|
| 비유 | 땅과 전기만 빌려줌 | 주방 도구와 가스레인지까지 빌려줌 | 이미 완성된 요리를 배달해줌 |
| 사용자 관리 | OS 설치, 런타임 설정, 보안 패치 등 | 애플리케이션 코드, 데이터 | 없음 (설정만 사용) |
| 대표 예시 | AWS EC2, Azure VM | Vercel, Netlify, Heroku | Gmail, Slack, Notion |
도커는 컨테이너 단위로 애플리케이션을 실행하는데 컨테이너들이 서로 격리되어 있으므로 독립성을 보장
각 컨테이너는 애플리케이션을 실행하는데 필요한 최소한의 바이너리, 라이브러리를 포함
소프트웨어를 배포할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 한데 모아 격리시킨 후
실행가능한 패키지로 만든 것
컨테이너들은 동일한 운영체제 위에서 작동하기 대문에, 서로 통신을 주고받을 수 있음
가상머신에 비해서도 리소스 소모량이 적다