[MSA 설계] 9주차-3일차: Docker 네트워크 및 데이터 관리

limlim·2025년 2월 19일
0

KDT

목록 보기
8/21
  1. Docker 네트워크란?
  • Docker 컨테이너 간 통신을 관리하는 기능

  • 기본적으로 컨테이너는 격리된 환경에서 실행되며, 네트워크를 통해 서로 통신 가능

  1. Docker 네트워크 종류

1) bridge

  • 기본 네트워크
  • 컨테이너 간 통신 가능, DNS 지원
  • 단일 호스트 내 컨테이너 간 통신에 사용

2) host

  • 호스트 네트워크 사용
  • 포트 매핑 불필요, 성능 최적화
  • 성능이 중요한 애플리케이션에 사용

3) none

  • 네트워크 없음
  • 보안성이 높음, 외부 연결 불가
  • 네트워크를 사용하지 않는 컨테이너에 사용

4) overlay

  • 여러 호스트 연결
  • Swarm 모드 필요, 컨테이너 간 자동 DNS
  • 여러 호스트에 걸친 서비스

5) macvlan

  • 물리 네트워크 인터페이스 사용
  • 개별 MAC 주소 할당
  • 네트워크 장비와 직접 통신
  1. 컨테이너 간 기본 네트워크 통신 확인
  • busybox 이용
    : busybox는 하나의 실행 파일 안에 유닉스 도구들을 제공하는 소프트웨어 의미

  • 실습해보면 기본 bridge 네트워크에서 컨테이너 간 직접 통신이 안됨
    : 기본 bridge 네트워크에서는 컨테이너 이름 기반 DNS 해석 지원이 안되기 때문
    : IP 주소를 직접 사용해야 하지만, IP는 컨테이너 재시작 시 변경될 수 있어 관리 어려움
    : 사용자 정의 네트워크를 만들면 이름을 통해 자동으로 통신 가능

  • So, 컨테이너 이름으로 통신하려면 사용자 정의 네트워크(docker network create <네트워크명>)를 사용해야 함.

  1. Host 네트워크
  • 컨테이너가 호스트 시스템의 네트워크 인터페이스를 그대로 사용하도록 하는 네트워크 모드임.

  • 포트 매핑이 필요하지 않음.

  • 사용 예시

    docker run -d --network host nginx
     
     docker exec it containerID curl -v http://localhost 
    
  • 특징
    : 성능 향상
    : 포트 매핑 불필요

  • 단점
    : 컨테이너 간 격리 부족 (보안 위험)
    : 포트 충돌 발생 가능성
    : 멀티 호스트 환경에서는 사용 불가

  1. None 네트워크
  • 컨테이너가 어떠한 외부 네트워크와도 연결되지 않도록 하는 네트워크
  • 이 모드를 사용하면 외부와의 네트워킹이 완전히 차단되며, 로컬호스트 내에서만 독립적으로 실행됨.
  • 보안이 중요한 서비스에서 사용될 수 있음.
  1. Overlay 네트워크
  • Docker Swarm 클러스터 내의 다양한 노드에 걸쳐 있는 컨테이너들 사이의 통신을 가능하게 하는 네트워크임.
  • 여러 호스트에서 실행 중인 컨테이너 간에 안전하고 격리된 네트워크를 구축할 수 있도록 해줌.
  • 내부적으로 VXLAN 기술을 사용하여 물리 네트워크 위에 가상 네트워크를 구축함.
  1. macvlan 네트워크
  • Docker 컨테이너에 대한 고급 네트워킹 옵션을 제공하며, 각 컨테이너에 고유한 MAC 주소를 할당하여 물리 네트워크와 동일한 방식으로 통신하도록 함.
  • 기존의 물리적 네트워크 인프라에 완벽하게 통합될 수 있도록 설계되었으며, 특히 레거시 애플리케이션을 컨테이너화하는데 유용함.
  • 이 네트워크 드라이버를 사용하면 컨테이너가 물리 네트워크에 직접 연결된 것처럼 동작할 수 있음. 이는 각 컨테이너에 MAC 주소를 부여하고, 실제 물리 네트워크 상의 다른 장치와 동일한 방식으로 통신하게 함.
  1. 네트워크 트래픽 분석
  • 기본 설정 및 로깅
  • 네트워크 대역폭 분석
  • 연결 상태 분석
  • 포토 스캔
  • DNS 분석
  • 네트워크 지연 분석
  • 실시간 모니터링
  • 네트워크 성능 테스트: iperf3를 사용하여 네트워크 성능 테스트
  • 네트워크 분석 스크립트는 github에 정리
  1. 네트워크 트러블 슈팅
  • 관련 파일 및 스크립트는 github에 정리
  1. Docker 데이터 관리

1) Container Storage

  • 컨테이너 내부에 저장되는 임시 저장소로, 컨테이너 삭제 시 데이터도 함께 사라짐
  • 데이터 지속성: 컨테이너 생명주기와 동일
  • 성능: 디스크 속도에 의존
  • 사용 사례: 테스트 환경, 임시 데이터 처리

2) Bind Mounts

  • 호스트의 디렉토리나 파일을 컨테이너에 직접 마운트함. 호스트와 컨테이너 사이에서 파일 시스템을 공유
  • 데이터 지속성: 호스트 시스템에 의존, 컨테이너보다 오래 지속
  • 성능: 호스트 파일 시스템의 속도에 의존
  • 사용 사례: 개발 환경, 설정 파일, 로그 파일의 지속적 관리

3) Volumes

  • Docker가 관리하는 호스트 파일 시스템의 일부 영역에 데이터를 저장. 컨테이너와 독립적으로 관리됨
  • 데이터 지속성: 컨테이너와 독립적으로 지속
  • 성능: 일반적으로 높은 I/O 성능
  • 사용 사례: 프로덕션 데이터 저장, 데이터베이스 관리

4) Tmpfs Mount

  • 메모리에 저장되며, 컨테이너 재시작 시 데이터가 유실됨. 높은 속도의 데이터 접근을 제공함
  • 데이터 지속성: 실행 중인 컨테이너에서만 지속
  • 성능: 매우 높은 속도 (RAM 기반)
  • 사용 사례: 민감한 정보 처리, 임시 캐시 생성

운영 모드에서는 어떤 방식을 가장 많이 쓸까?

-> 프로덕션(운영) 환경에서 도커 컨테이너의 데이터 관리는 안정성, 데이터 보존, 성능, 그리고 보안 등 여러 요소를 고려해야 함.
-> 프로덕션 환경에서는 주로 볼륨을 사용하는 것이 일반적임
-> 또한, Docker Swarm, Kubernetes 등의 오케스트레이션 도구와의 통합을 통해 복잡한 애플리케이션과 서비스를 관리할 때도 볼륨을 활용하여 데이터를 효과적으로 관리할 수 있음

  1. 기본 볼륨
  • 관련 명령어는 github에 정리
  1. 바인드 마운트
  • 관련 명령어는 github에 정리
  1. 볼륨 및 바인드 마운트 비교

1) Docker Volume

  • 저장 위치: /var/lib/docker/volumes/ (Docker가 관리)
  • 컨테이너 독립성: 컨테이너 삭제 후에도 데이터 유지 (Production 환경에 적합)
  • 권한 관리: Docker가 관리하여 더 안전함
  • 사용 예시: 데이터베이스, 로그 저장

2) Bind Mount

  • 저장 위치: 지정된 호스트 디렉토리 사용
  • 컨테이너 독립성: 컨테이너와 직접 연결 (로컬 개발 환경에 적합)
  • 권한 관리: 호스트의 파일 시스템 권한이 필요
  • 사용 예시: 로컬 개발, 설정 파일 공유
profile
不怕慢,只怕站 개발자

0개의 댓글