주요 네트워크 유형
docker network ls
NETWORK ID NAME DRIVER SCOPE
*************** bridge bridge local
*************** host host local
| Bridge 네트워크
- Bridge 네트워크는 Docker의 기본 네트워크 드라이버
같은 Docker 호스트 내의 컨테이너들이 서로 통신할 수 있게 해주는 소프트웨어 브릿지
- Bridge 네트워크는 마치 가상의 스위치처럼 작동함.
네트워크에 연결된 컨테이너들은 각자 고유한 내부 IP 주소를 받게 되며, 이를 통해 서로 통신 가능
주요 특징
- 동일한 호스트 내 컨테이너 간 통신 가능
- 호스트와 컨테이너 간 통신 가능
- 컨테이너를 외부 네트워크에 노출 가능 (포트 매핑)
- 기본적으로 생성되는 'bridge' 네트워크와 사용자 정의 bridge 네트워크 존재
사용 예
기본 bridge 네트워크를 사용하여 컨테이너 실행:
docker run -d --name my_container nginx
사용자 정의 bridge 네트워크 생성 및 사용:
docker network create my_network docker run -d --name my_container --network my_network nginx
| Host 네트워크
- Host 네트워크는 컨테이너가 호스트의 네트워크 스택을 직접 사용하게 함
즉, 컨테이너가 호스트 컴퓨터의 네트워크를 그대로 사용하는 것
이 모드에서는 컨테이너가 별도의 네트워크 네임스페이스를 갖지 않고, 호스트의 IP 주소와 포트를 직접 사용함
주요 특징
네트워크 성능 오버헤드가 거의 없음
호스트의 네트워크 인터페이스를 직접 사용
포트 매핑이 필요 없음 (호스트의 포트를 그대로 사용)
컨테이너 간 포트 충돌 가능성 있음
사용 예
Host 네트워크를 사용하여 Nginx 컨테이너 실행:
docker run -d --network host nginx
이 경우, Nginx는 호스트의 80번 포트를 직접 사용하게 됨
| Overlay 네트워크
- Overlay 네트워크는 여러 Docker 데몬 호스트에 걸쳐 분산된 네트워크를 생성함
- 서로 다른 호스트의 컨테이너들이 마치 같은 로컬 네트워크에 있는 것처럼 통신할 수 있게 해줌
- Docker Swarm 모드에서 주로 사용되며, 여러 호스트에 걸친 서비스 간 통신을 가능하게 함
- Overlay 네트워크는 여러 컴퓨터에 설치된 Docker 간에 통신을 가능하게 해주는 가상 네트워크임
- 쉽게 말해, 여러 컴퓨터에 있는 Docker 컨테이너들이 마치 같은 컴퓨터에 있는 것처럼 서로 대화할 수 있게 해줌
주요 특징
여러 Docker 호스트에 걸친 컨테이너 간 통신 가능
자동으로 내부 IP 주소 지정 및 서비스 검색 기능 제공
트래픽 암호화 옵션 제공 (보안 강화)
Docker Swarm 클러스터 내에서 서비스 로드 밸런싱 지원
[도커 스웜]
Docker Swarm은 여러 Docker 호스트를 하나의 클러스터로 관리하는 도구
- 기본 개념:
- Swarm: 함께 작동하는 Docker 엔진 그룹
- Node: Swarm의 일부인 Docker 엔진 인스턴스
- Manager Node: Swarm 클러스터를 관리하고 오케스트레이션 작업을 수행
- Worker Node: 실제로 컨테이너를 실행하는 노드
- 주요 특징:
- 분산 디자인: 여러 노드에 걸쳐 애플리케이션을 배포할 수 있음
- 선언적 서비스 모델: 원하는 애플리케이션 상태를 선언적으로 정의
- 확장성: 서비스를 쉽게 확장하거나 축소할 수 있음
- 상태 조정: 지속적으로 클러스터 상태를 모니터링하고 조정
- 멀티 호스트 네트워킹: 여러 호스트에 걸친 오버레이 네트워크 지원
- 서비스 디스커버리: 내장된 DNS를 통한 서비스 디스커버리
- 롤링 업데이트: 서비스를 중단 없이 업데이트 가능
- 사용 사례:
- 고가용성 애플리케이션 배포
- 로드 밸런싱
- 서비스 오케스트레이션
- 클러스터 간 작업 분배
- Kubernetes와의 비교:
- Docker Swarm은 일반적으로 설정이 더 간단하고 학습 곡선이 낮음
- Kubernetes는 더 복잡하지만 더 많은 기능과 유연성을 제공
- Swarm은 소규모에서 중간 규모의 배포에 적합, Kubernetes는 대규모 복잡한 배포에 더 적합
- 기본 명령어:
- Swarm 초기화: docker swarm init
- 노드 추가: docker swarm join
- 서비스 생성: docker service create
- 서비스 목록 보기: docker service ls
Docker Swarm은 Docker를 이미 사용하고 있는 팀이 클러스터링과 오케스트레이션을 시작하기에 좋은 진입점이 될 수 있습니다. 특히 작은 규모의 프로젝트나 Docker에 익숙한 팀에게 유용할 수 있습니다.
하지만 Overlay 네트워크의 기본 개념은 "여러 컴퓨터의 Docker 컨테이너들을 하나의 네트워크로 연결"한다는 것임.
Overlay 네트워크와 Docker Swarm은 관련이 있지만 별개의 개념임
- 여러 컴퓨터의 Docker 컨테이너들이 직접 통신 가능
- 컨테이너들의 IP 주소를 자동으로 관리
- 필요하면 통신 내용을 암호화하여 보안 강화 가능
Overlay 네트워크가 필요한 이유
- 여러 컴퓨터에 분산된 애플리케이션 실행:
예를 들어, 웹서버는 컴퓨터 A에, 데이터베이스는 컴퓨터 B에 있어도 서로 쉽게 통신할 수 있음
- 대규모 애플리케이션 관리:
트래픽이 많아져서 여러 컴퓨터로 작업을 나눠야 할 때 유용
- 고가용성:
한 컴퓨터가 고장 나도 다른 컴퓨터가 일을 이어받을 수 있음
비유
- Overlay 네트워크는 마치 여러 사무실 건물을 연결하는 지하통로와 같음
각 건물(컴퓨터)에는 여러 사무실(컨테이너)이 있고, 지하통로(Overlay 네트워크)를 통해 다른 건물의 사무실과도 쉽게 소통 가능
| 네트워크 선택 가이드
Bridge 네트워크 사용 시기:
- 대부분의 일반적인 컨테이너 사용 사례
- 같은 호스트 내에서 여러 컨테이너를 실행하고 서로 통신해야 할 때
- 컨테이너를 외부에 노출시키되, 호스트의 네트워크와 일정 수준의 격리가 필요할 때
Host 네트워크 사용 시기:
- 최대의 네트워크 성능이 필요할 때
- 컨테이너가 호스트의 네트워크를 직접 사용해야 할 때
- 포트 매핑이 복잡하거나 불가능한 상황일 때
Overlay 네트워크 사용 시기:
- 여러 Docker 호스트 에 걸쳐 있는 컨테이너 간 통신이 필요할 때
- Docker Swarm을 사용하여 클러스터를 구성할 때
- 마이크로서비스 아키텍처를 구현할 때
- 대규모 분산 애플리케이션을 배포할 때 (애플리케이션이 커져서 여러 컴퓨터로 분산해야 할 때)
- 고가용성(High Availability)을 구현하고자 할 때 (안정성을 높이기 위해 같은 서비스를 여러 컴퓨터에서 동시에 실행하고 싶을 때)
'docker' 카테고리의 다른 글
Docker - Malware Blocked and Moved to Trash (0) | 2025.01.12 |
---|---|
[docker] 네트워킹 심화: DNS부터 볼륨 관리까지 (0) | 2024.08.12 |
[docker] 컨테이너간 통신 이해 (0) | 2024.08.12 |
[docker] 컨테이너 볼륨 백업 (1) | 2024.07.24 |
쿠버네티스 오버뷰 (1) | 2024.06.17 |