일일 정리

Container & Process

mysecurity 2025. 5. 22. 11:13

목차

1. Container & Process

1-1 Container & Process

 

 

1. Container & Process

1-1 Container & Process

컨테이너는 실행에 필요한 모든 파일을 포함한 런타임 환경에서 애플리케이션을 패키징하고 격리하는 기술이다. 즉 프로그램과 그 프로그램에 필요한 라이브러리를 하나로 묶어 격리한다.

 

● 컨테이너의 격리 기술

컨테이너는 격리된 환경에서 실행되는 프로세스로, 다음과 같은 기술을 이용한다.

- cgroup(control groups)

  : 프로세스들을 격리할 때 이용하는 기술로, 프로세스들의 자원의 사용(CPU, 메모리, 디스크 입출력, 네트워크 등)을 제한하고 격리시키는 리눅스 커널 기능이다.

 

- Namespace

  : 동일한 컨텍스트 및 범위 내에서 식별자는 엔티티를 고유하게 식별한다.

  : 운영체제 에서 디렉토리는 네임스페이스로, 디렉토리 내의 각 파일이나 하위 디렉토리의 이름은 고유하다.

   ex) 한 디렉토리 안에 a.txt 파일은 둘 이상 존재할 수 없다. 그러나 다른 디렉토리에는 a.txt 파일이 존재할 수 있다.

 

- chroot

  : 프로세스의 루트 디렉토리를 변경하는 리눅스 시스템콜/명령어이다.

 

※ 참고사항

PID 0 : swapper로 프로세스의 스케쥴링을 담당하며 프로세스라기보다는 OS의 일부로 보는 것이 좋다.

PID 1 : /usr/lib/systemd/systemd 시스템의 초기화 프로세스이다. OS에서 PID 1이 죽는다면 OS가 죽는다는 것이다. 이와 마찬가지로 컨테이너 내의 PID 1이 죽는다면 컨테이너가 죽는다는 것이다.

 

● 격리 실습

컨테이너에서 실행 중인 프로세스의 정보를 확인한다.

docker [container] top container_name

- mycentos1 컨테이너의 /bin/bash 프로세스의 PID는 OS 관점에서는 1664이나, 컨테이너의 관점에서는 1이다.

- 컨테이너의 프로세스는 격리된 환경에서 실행되므로 위와 같이 PID를 인식한다.

 

 

실행 중인 컨테이너에서 프로그램을 실행한다.

docker [container] exec [option] container_name command

- mycentos1 컨테이너에서 /bin/bash 프로세스를 실행 시 PID 1이 아닌 새로운 프로세스로 추가된다.

- 새로운 프로세스 실행, 접속 후 ps -ef를 실행하였으므로 /bin/bash의 PID와 ps -ef의 PPID(부모 프로세스의 PID)가 15로 같다.

- OS 관점에서 mycentos1 컨테이너의 첫 프로세스의 PPID는 컨테이너 관련 프로세스 PID 1838의 자식 프로세스이다.

 

- mycentos1 컨테이너에 접속 후 exit 실행 시 컨테이너가 같이 죽으나, 추가된 /bin/bash 프로세스에서 exit 실행 시 PID가 1이 아니므로 해당 쉘만 죽고 컨테이너는 죽지 않는다.

 

 

이미지 내부에 특정 프로세스를 이용하여 컨테이너를 실행할 수 있다.

docker [container] run [option] image_name command

- 캘린더 출력은 한번 실행하고 끝나는 프로세스이므로 컨테이너를 죽이지 않아도 죽어있다.

 

- 핑을 보내는 프로세스는 계속 유지되는 프로세스이므로 죽이지 않는 이상 컨테이너도 유지된다. 즉, PID 1인 프로세스가 활성화되어있는 동안 컨테이너는 유지된다.

'일일 정리' 카테고리의 다른 글

Data와 Volume  (1) 2025.05.26
Docker Network  (0) 2025.05.23
Docker container command  (2) 2025.05.21
Docker Command, Docker Image & HUB  (2) 2025.05.19
DOCKER  (0) 2025.05.16