[번외] 프로세스와 도커 컨테이너
유사점
- 격리된 실행 환경
- 프로세스: 각 프로세스는 메모리, 파일 핸들, 네트워크 포트 등 자원을 격리된 상태에서 사용한다.
- 컨테이너: 컨테이너도 격리된 실행 환경을 제공한다. 각 컨테이너는 자체 파일 시스템, 네트워크 인터페이스 등을 갖추고 있으며, 다른 컨테이너와 자원을 격리하여 사용한다.
- 동적 생성 및 종료
- 프로세스: 프로세스는 실행 중에 동적으로 생성되고 종료된다.
- 컨테이너: 컨테이너도 필요한 경우 동적으로 생성되고, 작업이 완료되면 종료된다.
- 리소스 관리
- 프로세스: 운영체제는 CPU, 메모리, I/O 등 프로세스의 리소스를 관리한다.
- 컨테이너: 도커는 cgroups와 namespaces를 사용하여 각 컨테이너의 CPU, 메모리, 네트워크 등의 리소스를 관리한다.
차이점
- 격리 수준
- 프로세스: 프로세스는 같은 커널 공간을 공유하며, 격리 수준이 낮다.
- 컨테이너: 컨테이너는 namespaces와 cgroups를 사용하여 더 높은 수준의 격리를 제공한다. 컨테이너는 파일 시스템, 네트워크, 프로세스 공간 등을 격리한다.
- 종속성 관리
- 프로세스: 전통적인 프로세스는 호스트 시스템에 설치된 종속성에 의존한다.
- 컨테이너: 컨테이너는 종속성을 함께 패키징하여 실행 환경을 완벽하게 재현할 수 있다. 컨테이너 이미지는 필요한 모든 라이브러리와 종속성을 포함한다.
- 배포 및 이동성
- 프로세스: 전통적인 프로세스는 특정 호스트에 종속되며, 다른 시스템으로 쉽게 이동할 수 없다.
- 컨테이너: 컨테이너 이미지는 이식성이 높아, 어디서든 동일한 환경에서 실행될 수 있다. 도커 이미지를 사용하면 애플리케이션을 쉽게 배포하고, 환경 간에 일관성을 유지할 수 있다.
- 관리 도구
- 프로세스: 전통적인 리눅스 프로세스는
ps
,top
,kill
등의 명령어로 관리한다. - 컨테이너: 도커 컨테이너는
docker ps
,docker stop
,docker rm
등의 도커 명령어로 관리한다.
- 프로세스: 전통적인 리눅스 프로세스는
예제
리눅스 프로세스
# 백그라운드에서 sleep 100 프로세스를 실행
sleep 100 &
# 실행 중인 프로세스 목록 보기
ps aux | grep sleep
도커 컨테이너
# 백그라운드에서 도커 컨테이너를 실행
docker run -d --name my-container alpine sleep 100
# 실행 중인 도커 컨테이너 목록 보기
docker ps
# 도커 컨테이너 중지
docker stop my-container
# 도커 컨테이너 삭제
docker rm my-container