Docker Compose 보안 설정 완벽 가이드! 안전한 Container 운영 환경 구축 방법 알아보기

Docker Compose를 사용하면 빠르게 서비스를 구축할 수 있지만 Production 환경에서는 반드시 보안 설정을 함께 적용해야 합니다.

Container는 격리된 환경에서 실행되지만 기본 설정 그대로 운영하면 보안 위험이 발생할 수 있습니다.

대표적인 보안 문제:

잘못된 Password 관리

↓

Database 외부 노출

↓

Container 권한 상승

↓

서비스 공격 위험

운영 서버에서는 다음 요소를 관리해야 합니다.

  • Container 권한
  • Secret 관리
  • Network 접근 제한
  • Image 보안
  • Port 관리
  • 사용자 권한
  • 로그 보안

안전한 Production 구조:

Internet

↓

Nginx

↓

Application Container

↓

Private Network

↓

Database Container

↓

Encrypted Backup

이번 글에서는 Docker Compose 보안 기본 원칙부터 Container 권한 제한, Network 보안, Image 관리, Database 보호 방법까지 실제 운영 서버 기준으로 알아보겠습니다.

Docker Compose 보안이 중요한 이유

Docker Container는 Host OS 위에서 실행됩니다.

구조:

Host Server

↓

Docker Engine

↓

Container

↓

Application

Container 자체는 격리되어 있지만 설정이 잘못되면 문제가 발생할 수 있습니다.

예:

취약한 Container

↓

Host 접근

↓

서버 위험

따라서 Production에서는 보안을 기본 설정으로 적용해야 합니다.

Docker Compose Password 관리

가장 흔한 보안 실수는 Password를 Compose 파일에 직접 작성하는 것입니다.

잘못된 예:

environment:

  MYSQL_PASSWORD: password123

문제:

  • Git 저장소 노출
  • 파일 공유 시 위험
  • 관리자 정보 유출

권장:

.env 사용

.env:

MYSQL_PASSWORD=secure_password

docker-compose.yml:

environment:

  MYSQL_PASSWORD: ${MYSQL_PASSWORD}

구조:

환경 변수

↓

Docker Compose

↓

Container

Docker Compose Secret 관리

Production에서는 Secret 전용 관리 방식이 필요합니다.

관리 대상:

  • Database Password
  • API Key
  • Token
  • 인증서

좋지 않은 방식:

compose.yml

↓

Password 저장

좋은 방식:

Secret Storage

↓

Container 전달

Docker Swarm 환경에서는 Secret 기능을 제공합니다.

예:

docker secret create db_password password.txt

Docker Compose Container Root 권한 제한

Container는 기본적으로 Root 권한으로 실행될 수 있습니다.

위험:

Container

↓

Root 권한

↓

취약점 발생 시 위험 증가

권장:

별도 User 사용

Dockerfile:

USER appuser

효과:

  • 권한 최소화
  • 보안 강화

Docker Compose Privileged 옵션 주의

다음 설정은 매우 강한 권한을 제공합니다.

예:

privileged: true

문제:

Container

↓

Host 접근 가능성 증가

Production에서는 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋습니다.

Docker Compose Port 보안 설정

모든 Port를 외부 공개하면 위험합니다.

잘못된 구조:

Internet

↓

3306 MySQL

↓

Database

좋은 구조:

Application

↓

Private Network

↓

Database

Database Port:

expose:

  - "3306"

사용:

  • 내부 통신
  • 외부 차단

Docker Compose Network 보안

Network 분리는 중요한 보안 방법입니다.

좋지 않은 구조:

모든 Container

↓

하나의 Network

문제:

하나의 서비스 문제가 전체 서비스로 확산

권장:

Frontend Network

↓

Nginx


Backend Network

↓

Application


Database Network

↓

Database

서비스별 접근 범위를 제한합니다.

Docker Compose Image 보안 관리

Image는 외부 코드가 포함된 실행 환경입니다.

주의:

image: unknown-image

권장:

공식 Image 사용

예:

image: nginx:1.27

관리:

  • Version 고정
  • 취약점 검사
  • 불필요 Package 제거

Docker Compose Image 취약점 검사

Docker Scout 사용:

docker scout cves image-name

확인:

  • 취약한 Package
  • 보안 문제
  • 업데이트 필요 여부

Docker Compose Read Only 파일 시스템

Container 파일 변경을 제한할 수 있습니다.

예:

read_only: true

효과:

  • 악성 파일 생성 방지
  • Container 변경 제한

Docker Compose Resource 제한

보안뿐 아니라 안정성 측면에서도 중요합니다.

예:

deploy:

  resources:

    limits:

      memory: 1G

효과:

하나의 Container 장애

↓

전체 서버 영향 감소

Docker Compose Security Options

추가 보안 옵션:

예:

security_opt:

  - no-new-privileges:true

효과:

Container 내부 권한 상승 방지

Docker Compose Database 보안

Database는 가장 중요한 보호 대상입니다.

필수:

  • 강력한 Password
  • 외부 Port 차단
  • Backup 암호화
  • 최소 권한 User

구조:

Application

↓

Database

↓

Volume

↓

Encrypted Backup

Docker Compose 로그 보안

로그에도 민감 정보가 포함될 수 있습니다.

위험:

Password 출력

Token 출력

API Key 출력

관리:

  • Secret Masking
  • 로그 접근 제한
  • 보관 기간 설정

Docker Compose 보안 체크리스트

Production 배포 전 확인:

Password:

환경 변수 분리

Network:

Database 외부 차단

Container:

Root 실행 제한

Image:

취약점 검사

Backup:

암호화 저장

Docker Compose Production 보안 구조

최종 구조:

Internet

↓

Nginx

↓

Application Container

↓

Private Network

↓

Database Container

↓

Encrypted Volume Backup


Monitoring

↓

Security Alert

자주 묻는 질문

Docker Compose는 보안성이 낮나요?

아닙니다.

올바른 권한 관리와 Network 설계를 적용하면 안정적으로 운영할 수 있습니다.

Database Port를 열어도 되나요?

가능하지만 Production에서는 내부 Network 연결을 권장합니다.

Password를 Compose 파일에 작성하면 안 되나요?

개발 환경에서는 가능하지만 운영 환경에서는 분리하는 것이 좋습니다.

Container가 완전히 안전한가요?

Container도 설정과 관리가 중요하며 정기적인 보안 관리가 필요합니다.

마무리

Docker Compose 보안 설정은 Production 서버 운영에서 반드시 고려해야 하는 부분입니다.

핵심 원칙:

최소 권한

↓

Network 분리

↓

Secret 관리

↓

Image 보안

↓

Backup 보호

이 구조를 적용하면 Docker Compose 기반 서비스를 더욱 안전하게 운영할 수 있습니다.

다음 글에서는 Database Password, API Key 같은 민감 정보를 안전하게 관리하는 Docker Compose Secrets 관리 방법을 알아보겠습니다.

댓글 남기기