본문 바로가기
Docker

도커 인 액션 6장

by xogns93 2024. 12. 5.

Docker는 컨테이너의 리소스 관리 및 보안 강화를 위해 다양한 기능을 제공합니다. 이를 통해 컨테이너가 사용하는 컴퓨팅 리소스를 제한하고, 보안을 강화하며, 시스템 안정성을 유지할 수 있습니다. Docker에서 제공하는 주요 개념과 도구를 요약하면 다음과 같습니다.

 

 

1. 리소스 한도 설정

1.1 메모리 제한

  • 명령어: --memory 또는 -m
  • 특정 컨테이너가 사용할 수 있는 메모리 크기를 제한.
  • 예: docker container run --memory 256m ...
  • 제한은 메모리 예약이 아닌 최대치를 설정.
  • 실행 중인 메모리 사용량 확인: docker stats

1.2 CPU 제한

  • CPU 점유율:
    • 명령어: --cpu-shares
    • 다른 컨테이너와의 비율로 CPU 점유량을 설정.
    • 예: --cpu-shares 512 (다른 컨테이너 대비 50% CPU 사용 우선순위).
  • CPU 코어 수 제한:
    • 명령어: --cpuset-cpus
    • 특정 코어에서만 실행하도록 제한.
    • 예: --cpuset-cpus 0,1 (CPU 0과 1에서만 실행).
  • CPU 사용량 제한:
    • 명령어: --cpus
    • 할당된 CPU 코어의 수를 제한.
    • 예: --cpus 1.5 (최대 1.5개의 CPU 사용).

1.3 디바이스 접근 제어

  • 명령어: --device
  • 특정 하드웨어 디바이스(예: 웹캠, USB 드라이브)에 대한 접근 권한 설정.
  • 예: --device /dev/video0:/dev/video0

2. 컨테이너 간 메모리 공유

2.1 IPC 네임스페이스

  • Docker는 기본적으로 각 컨테이너에 독립된 IPC(Inter-Process Communication) 네임스페이스를 제공합니다.
  • 명령어: --ipc
    • 컨테이너 간 메모리 네임스페이스 공유 가능.
    • 예: --ipc container:<container-name>

3. 사용자 및 권한 관리

3.1 사용자 ID 설정

  • 컨테이너 내부에서 사용될 사용자 설정:
    • 명령어: --user 또는 -u
    • 예: --user nobody
  • 사용자와 그룹 ID를 직접 설정:
    • 예: --user 1001:1001

3.2 사용자 네임스페이스(User Namespace)

  • 컨테이너의 사용자 ID를 호스트의 비권한 사용자 ID로 매핑.
  • 장점:
    • 컨테이너 내부의 root 사용자도 호스트에서는 제한된 사용자로 처리.
    • 데이터와 파일 접근에 대한 보안 강화.

4. 리눅스 커널 기능 제어

4.1 Capabilities 관리

  • 컨테이너가 사용할 수 있는 리눅스 커널 기능(권한)을 조정.
  • 명령어:
    • 권한 제거: --cap-drop
    • 권한 추가: --cap-add
    • 예: --cap-drop net_raw (Raw 소켓 사용 제거).

4.2 Privileged 모드

  • 명령어: --privileged
  • 컨테이너에 모든 시스템 권한을 부여.
  • 디바이스, 네트워크 구성 및 보안 설정에 사용.
  • 예: docker container run --privileged ...

5. 보안 옵션

5.1 Seccomp

  • 컨테이너가 호출할 수 있는 시스템 콜을 제한.
  • 기본적으로 Docker는 40개 이상의 위험한 시스템 콜을 차단.
  • 사용자 정의 Seccomp 프로파일 사용 가능:
    • 예: --security-opt seccomp=<path-to-profile>

5.2 SELinux

  • 레이블 기반 접근 제어(MAC) 시스템.
  • SELinux 레이블 설정 예:
    • --security-opt label=type:container_t

5.3 AppArmor

  • 파일 경로 기반 접근 제어를 제공하는 보안 프로파일.
  • 명령어: --security-opt apparmor=<profile-name>

6. 모범 사례

  1. 리소스 관리:
    • 애플리케이션별 적절한 메모리와 CPU 제한 설정.
    • 사용하지 않는 권한 및 디바이스 접근 차단.
  2. 사용자 계정 관리:
    • 컨테이너는 root 대신 제한된 사용자로 실행.
    • 사용자 네임스페이스 활성화로 추가 보안.
  3. 보안 설정:
    • 필요한 경우에만 --privileged 사용.
    • SELinux, AppArmor, Seccomp 등을 활용해 컨테이너 보안 강화.
  4. 최소 권한의 원칙:
    • 컨테이너에 필요한 기능만 허용.
    • 기본 제공되는 보안 도구 적극 활용.

결론

Docker는 컨테이너의 리소스와 보안을 제어할 수 있는 강력한 도구를 제공합니다. 이를 통해 애플리케이션 격리를 강화하고, 시스템 안정성을 유지하며, 보안 위협을 줄일 수 있습니다. 최신 Docker 및 Linux 배포판과 통합된 기능을 활용하여 효율적이고 안전한 컨테이너 환경을 구축하는 것이 중요합니다.

'Docker' 카테고리의 다른 글

클러스터(cluster)  (0) 2024.12.05
쿠버네티스(Kubernetes)  (0) 2024.12.05
도커 인 액션 5장  (0) 2024.12.04
볼륨(Volume)  (0) 2024.12.04
도커 인 액션 4장  (0) 2024.12.04