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