버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

컨테이너를 사용하면 개발자와 IT 운영팀이 훨씬 작은 단위로 업무를 수행할 수 있으므로 그에 따른 이점도 많습니다.

컨테이너 살펴보기

...

 

정보
  • Control groups : 리소스 사용량(CPU/Memory/Network/Storage) 결정

  • Namespaces : 자원을 격리(네트워크/프로세스/사용자정보 - 공개 범위를 결정)

  • Union mount file system : 컨테이너 이미지를 효율적으로 관리

컨테이너

컨테이너는 애플리케이션을 실행하는 데 사용될 수 있는 OS 가상화의 한 형태입니다

이를 위해 컨테이너는 리눅스 커널의 몇 가지 새로운 기능으로 제작되었으며, 그 중 두 가지 주요 기능은 "namespace"와 "cgroups"입니다.

리눅스 네임스페이스

네임스페이스는 리눅스 커널의 기능 중 하나이며 리눅스의 컨테이너의 기본적인 측면입니다.반면에 네임스페이스는 격리 계층을 제공합니다.네임스페이스는 한 프로세스 집합은 한 리소스 집합을 보고 다른 프로세스 집합은 다른 리소스 집합을 보도록 커널 리소스를 분할하는 리눅스 커널의 기능입니다.

정보

리눅스에는 다양한 종류의 네임스페이스가 있습니다.

  • PID — PID 네임스페이스를 통해 별도의 프로세스를 만들 수 있습니다.

  • 네트워크 — 네트워킹 네임스페이스를 사용하면 같은 컴퓨터에서 실행되는 다른 프로세스와 충돌하지 않고 포트에서 프로그램을 실행할 수 있습니다.

  • IPC(Interprocess communication) 네임스페이스에는 자체 IPC 리소스(예: POSIX 메시지 큐)가 있습니다.

  • 마운트 — 마운트 네임스페이스를 사용하면 호스트 파일 시스템에 영향을 주지 않고 파일 시스템을 마운트 및 마운트 해제할 수 있습니다.

  • UNIX Time-Sharing (UTS) 네임스페이스를 사용하면 단일 시스템이 서로 다른 프로세스의 호스트 및 도메인 이름을 가지는 것처럼 보일 수 있습니다.

Linux 네임스페이스를 만드는 것은 매우 간단하며 UTS namespace를 만들어서 확인해보겠습니다.

코드 블럭
root@ubuntu-focal:~# unshare --fork --pid --mount-proc bash
root@ubuntu-focal:~# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.3   8960  3928 pts/4    S    13:00   0:00 bash
root           8  0.0  0.3  10612  3268 pts/4    R+   13:00   0:00 ps aux

이것을 호스트에서 보면 다음과 같이 보인다.

코드 블럭
root@ubuntu-focal:~# ps aux | grep unshare
root        9258  0.0  0.0   7232   520 pts/3    S    13:09   0:00 unshare --fork --pid --mount-proc bash
root        9372  0.0  0.0   8160   720 pts/4    S+   13:09   0:00 grep --color=auto unshare

unshare namespace에서 빠져나오기 위해서는 docker에서 빠져나오듯이 exit로 빠져나올수 있다.

코드 블럭
root@ubuntu-focal:~# exit
exit
root@ubuntu-focal:~# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.8 102540  8840 ?        Ss   12:04   0:02 /sbin/init
root           2  0.0  0.0      0     0 ?        S    12:04   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   12:04   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   12:04   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   12:04   0:00 [kworker/0:0H-kblockd]

Cgroup

리눅스 네임스페이스로 다른 프로세스와는 별도의 프로세스를 만들 수도 있었습니다.

그러나 여러 네임스페이스를 생성할 경우 각 네임스페이스의 리소스를 제한하여 다른 네임스페이스의 리소스를 차지하지 않도록 하려면 어떻게 해야 합니까?

2007년에 몇몇 사람들은 우리만을 위한 cgroup을 개발했습니다.이것은 프로세스의 리소스를 제한할 수 있는 리눅스 기능입니다.Cgroups는 프로세스에서 사용할 수 있는 CPU 및 메모리의 한계를 결정합니다.

Cgroups(제어 그룹에서 약칭)는 프로세스의 리소스 사용량(CPU, 메모리, 디스크 I/O, 네트워크 등)을 제한, 계정 및 분리하는 리눅스 커널 기능으로, 2008년 1월 출시된 커널 버전 2.6.24에서는 제어 그룹 기능이 리눅스 커널 메인 라인에 병합되었습니다.

정보

cgroups로 제어할 수 있는 일반적인 리소스는 다음과 같습니다.

  • CPU: 프로세스 그룹에서 사용하는 CPU 시간을 제한

  • 메모리: 프로세스 그룹에서 사용하는 메모리 양을 제한합니다.

  • I/O: 프로세스 그룹에서 사용하는 Disk I/O 양 제한

  • 네트워크: 프로세스 그룹에서 사용하는 네트워크 대역폭의 양을 제한합니다.

1.4 컨테이너의 장점

(1) 가벼움

  • 사용자의 Request Traffic 이 증가함에 따라, 가상머신이나 컨테이너를 추가적으로 배포합니다.

  • 가상머신의 크기는 최소 몇 GB이지만, 컨테이너의 경우 Guest OS가 없기에 MB단위의 크기를 가집니다.

  • 가상머신은 배포하는데 수분에서 수 십분의 시간이 소요되지만, 컨테이너는 배포에 소요되는 몇 초 밖에 걸리지 않습니다.

...