- Docker 네트워크란?
- Docker 네트워크 종류
1) bridge
- 기본 네트워크
- 컨테이너 간 통신 가능, DNS 지원
- 단일 호스트 내 컨테이너 간 통신에 사용
2) host
- 호스트 네트워크 사용
- 포트 매핑 불필요, 성능 최적화
- 성능이 중요한 애플리케이션에 사용
3) none
- 네트워크 없음
- 보안성이 높음, 외부 연결 불가
- 네트워크를 사용하지 않는 컨테이너에 사용
4) overlay
- 여러 호스트 연결
- Swarm 모드 필요, 컨테이너 간 자동 DNS
- 여러 호스트에 걸친 서비스
5) macvlan
- 물리 네트워크 인터페이스 사용
- 개별 MAC 주소 할당
- 네트워크 장비와 직접 통신
- 컨테이너 간 기본 네트워크 통신 확인
-
busybox 이용
: busybox는 하나의 실행 파일 안에 유닉스 도구들을 제공하는 소프트웨어 의미
-
실습해보면 기본 bridge 네트워크에서 컨테이너 간 직접 통신이 안됨
: 기본 bridge 네트워크에서는 컨테이너 이름 기반 DNS 해석 지원이 안되기 때문
: IP 주소를 직접 사용해야 하지만, IP는 컨테이너 재시작 시 변경될 수 있어 관리 어려움
: 사용자 정의 네트워크를 만들면 이름을 통해 자동으로 통신 가능
-
So, 컨테이너 이름으로 통신하려면 사용자 정의 네트워크(docker network create <네트워크명>
)를 사용해야 함.
- Host 네트워크
-
컨테이너가 호스트 시스템의 네트워크 인터페이스를 그대로 사용하도록 하는 네트워크 모드임.
-
포트 매핑이 필요하지 않음.
-
사용 예시
docker run -d --network host nginx
docker exec it containerID curl -v http://localhost
-
특징
: 성능 향상
: 포트 매핑 불필요
-
단점
: 컨테이너 간 격리 부족 (보안 위험)
: 포트 충돌 발생 가능성
: 멀티 호스트 환경에서는 사용 불가
- None 네트워크
- 컨테이너가 어떠한 외부 네트워크와도 연결되지 않도록 하는 네트워크
- 이 모드를 사용하면 외부와의 네트워킹이 완전히 차단되며, 로컬호스트 내에서만 독립적으로 실행됨.
- 보안이 중요한 서비스에서 사용될 수 있음.
- Overlay 네트워크
- Docker Swarm 클러스터 내의 다양한 노드에 걸쳐 있는 컨테이너들 사이의 통신을 가능하게 하는 네트워크임.
- 여러 호스트에서 실행 중인 컨테이너 간에 안전하고 격리된 네트워크를 구축할 수 있도록 해줌.
- 내부적으로 VXLAN 기술을 사용하여 물리 네트워크 위에 가상 네트워크를 구축함.
- macvlan 네트워크
- Docker 컨테이너에 대한 고급 네트워킹 옵션을 제공하며, 각 컨테이너에 고유한 MAC 주소를 할당하여 물리 네트워크와 동일한 방식으로 통신하도록 함.
- 기존의 물리적 네트워크 인프라에 완벽하게 통합될 수 있도록 설계되었으며, 특히 레거시 애플리케이션을 컨테이너화하는데 유용함.
- 이 네트워크 드라이버를 사용하면 컨테이너가 물리 네트워크에 직접 연결된 것처럼 동작할 수 있음. 이는 각 컨테이너에 MAC 주소를 부여하고, 실제 물리 네트워크 상의 다른 장치와 동일한 방식으로 통신하게 함.
- 네트워크 트래픽 분석
- 기본 설정 및 로깅
- 네트워크 대역폭 분석
- 연결 상태 분석
- 포토 스캔
- DNS 분석
- 네트워크 지연 분석
- 실시간 모니터링
- 네트워크 성능 테스트:
iperf3
를 사용하여 네트워크 성능 테스트
- 네트워크 분석 스크립트는 github에 정리
- 네트워크 트러블 슈팅
- Docker 데이터 관리
1) Container Storage
- 컨테이너 내부에 저장되는 임시 저장소로, 컨테이너 삭제 시 데이터도 함께 사라짐
- 데이터 지속성: 컨테이너 생명주기와 동일
- 성능: 디스크 속도에 의존
- 사용 사례: 테스트 환경, 임시 데이터 처리
2) Bind Mounts
- 호스트의 디렉토리나 파일을 컨테이너에 직접 마운트함. 호스트와 컨테이너 사이에서 파일 시스템을 공유
- 데이터 지속성: 호스트 시스템에 의존, 컨테이너보다 오래 지속
- 성능: 호스트 파일 시스템의 속도에 의존
- 사용 사례: 개발 환경, 설정 파일, 로그 파일의 지속적 관리
3) Volumes
- Docker가 관리하는 호스트 파일 시스템의 일부 영역에 데이터를 저장. 컨테이너와 독립적으로 관리됨
- 데이터 지속성: 컨테이너와 독립적으로 지속
- 성능: 일반적으로 높은 I/O 성능
- 사용 사례: 프로덕션 데이터 저장, 데이터베이스 관리
4) Tmpfs Mount
- 메모리에 저장되며, 컨테이너 재시작 시 데이터가 유실됨. 높은 속도의 데이터 접근을 제공함
- 데이터 지속성: 실행 중인 컨테이너에서만 지속
- 성능: 매우 높은 속도 (RAM 기반)
- 사용 사례: 민감한 정보 처리, 임시 캐시 생성
운영 모드에서는 어떤 방식을 가장 많이 쓸까?
-> 프로덕션(운영) 환경에서 도커 컨테이너의 데이터 관리는 안정성, 데이터 보존, 성능, 그리고 보안 등 여러 요소를 고려해야 함.
-> 프로덕션 환경에서는 주로 볼륨
을 사용하는 것이 일반적임
-> 또한, Docker Swarm, Kubernetes 등의 오케스트레이션 도구와의 통합을 통해 복잡한 애플리케이션과 서비스를 관리할 때도 볼륨을 활용하여 데이터를 효과적으로 관리할 수 있음
- 기본 볼륨
- 바인드 마운트
- 볼륨 및 바인드 마운트 비교
1) Docker Volume
- 저장 위치:
/var/lib/docker/volumes/
(Docker가 관리)
- 컨테이너 독립성: 컨테이너 삭제 후에도 데이터 유지 (Production 환경에 적합)
- 권한 관리: Docker가 관리하여 더 안전함
- 사용 예시: 데이터베이스, 로그 저장
2) Bind Mount
- 저장 위치: 지정된 호스트 디렉토리 사용
- 컨테이너 독립성: 컨테이너와 직접 연결 (로컬 개발 환경에 적합)
- 권한 관리: 호스트의 파일 시스템 권한이 필요
- 사용 예시: 로컬 개발, 설정 파일 공유