일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- docker
- Django
- 개발언어
- 에어플로우 기초강의
- 플라스크
- 도커
- 도커 컴포즈
- 개발자
- 장고 기초 강의
- Python
- 예제프로젝트
- 파이썬 장고
- airflow
- flask
- ADP
- 인공지능
- c++
- 장고
- C언어
- 장고 튜토리얼
- 웹개발
- 쇼핑몰예제
- 프로그래밍
- c
- 개발자취업
- 파이썬강의
- cpp
- mlops
- 파이썬
- 기초강의
- Today
- Total
TITEDIOS 편한 코딩
[Docker]#15 Docker network - 도커 네트워크 기초 강의 본문
Docker 컨테이너는 독립된 환경에서 애플리케이션을 실행하지만, 서로 간에 네트워크를 통해 통신이 필요할 때가 많습니다. 서비스의 규모를 작게 축소하여 배포하는 대신 작은 서비스들 간의 통신을 해야할 상황이 많아졌기 때문입니다. 이때 중요한 역할을 하는 것이 바로 Docker 네트워크입니다. 이번 포스팅에서는 Docker 네트워크의 기본 개념과 종류, 사용 방법을 자세히 설명해 드리겠습니다.
Docker 네트워크란?
Docker 네트워크는 컨테이너들이 서로 통신할 수 있게 해주는 가상의 네트워크입니다. 네트워크를 통해 컨테이너 간의 데이터 전송, 서비스 발견, 외부 네트워크와의 연결 등이 가능해집니다. Docker는 다양한 네트워크 드라이버를 제공하여, 컨테이너 간의 통신 방식을 세밀하게 제어할 수 있습니다.
Docker 네트워크의 주요 개념
1. 네트워크 드라이버 (Network Driver)
Docker 네트워크는 네트워크 드라이버를 통해 구현됩니다. 각 드라이버는 컨테이너 간의 통신을 설정하는 방법을 정의하며, Docker는 기본적으로 다음과 같은 네트워크 드라이버를 제공합니다:
- Bridge (브리지): 기본 네트워크 드라이버로, 동일한 Docker 호스트 내의 컨테이너들이 통신할 수 있게 합니다. 컨테이너들은 가상 브리지를 통해 연결되며, 외부 네트워크와의 통신을 위해 NAT(Network Address Translation)를 사용합니다.
- Host (호스트): 컨테이너가 Docker 호스트의 네트워크를 직접 사용하는 드라이버입니다. 별도의 네트워크 격리 없이 호스트 네트워크와 동일한 네트워크 설정을 사용합니다.
- None (없음): 네트워크를 비활성화합니다. 컨테이너는 네트워크 인터페이스 없이 생성됩니다.
- Overlay (오버레이): 여러 Docker 호스트에 걸쳐 있는 컨테이너들이 네트워크를 통해 통신할 수 있도록 합니다. Swarm 모드에서 주로 사용되며, 멀티-호스트 네트워킹이 가능합니다.
- ipvlan: ipvaln 네트워크는 IPv4와 IPv6 주소 모두에 대해 제어할 수 있도록 네트워크 기능을 제공합니다.
- Macvlan: 컨테이너에 실제 물리적 네트워크 인터페이스처럼 동작하는 가상 네트워크 인터페이스를 할당합니다. 컨테이너에 고유의 MAC 주소를 부여하고, 컨테이너를 물리적 네트워크에 직접 연결할 수 있습니다.
2. 서브넷과 IP 주소
각 Docker 네트워크는 서브넷과 IP 주소 범위를 가집니다. 컨테이너는 네트워크에 연결될 때 이 범위 내에서 IP 주소를 할당받습니다. Bridge 네트워크의 경우 기본적으로 172.17.0.0/16 범위의 IP 주소가 할당됩니다.
3. 서비스 디스커버리 (Service Discovery)
Docker 네트워크는 컨테이너의 이름을 기반으로 서비스 디스커버리를 제공합니다. 컨테이너는 서로의 이름을 DNS 이름으로 사용할 수 있으며, 이를 통해 복잡한 IP 주소 대신 쉽게 통신할 수 있습니다. 다시말하면 어떤 컨테이너와 통신하고자 할 때 컨테이너에 할당된 IP 주소가 아니라 컨테이너 이름을 통해 통신할 수 있도록 해주는 기능입니다.
4. 포트 바인딩 (Port Binding)
Docker 컨테이너는 외부 네트워크와 통신하기 위해 포트 바인딩을 사용합니다. 컨테이너 내부의 특정 포트를 호스트의 포트에 바인딩하여 외부에서 컨테이너의 서비스를 접근할 수 있도록 합니다. 예를 들어, 컨테이너의 80번 포트를 호스트의 8080번 포트에 바인딩하면, 호스트의 http://localhost:8080으로 접근할 수 있습니다. 다른 네트워크보다 포트 바인딩을 가장 많이 사용하실 것입니다.
Docker 네트워크 사용 방법
1. 사용자 정의 브리지 네트워크 생성
사용자 정의 브리지 네트워크를 생성하면, 컨테이너 간의 통신을 더 세밀하게 제어할 수 있습니다. 사용자 정의 네트워크를 생성한 후 각 컨테이너 생성 시 생성한 네트워크를 지정해 줍니다. 그러면 사용자 정의 네트워크에 컨테이너들이 연결되어 통신이 가능합니다.
코드 복사
# 사용자 정의 네트워크 생성
docker network create my_bridge_network
# 네트워크에 연결된 컨테이너 생성
docker run -d --name container3 --network my_bridge_network nginx
docker run -d --name container4 --network my_bridge_network nginx
# 컨테이너3에서 컨테이너4로 ping 테스트
docker exec container3 apt-get update
docker exec container3 apt-get install inetutils-ping -y
docker exec container3 ping container4
nginx 이미지에는 ping 명령어가 포함되어 있지 않아 apt-get 패키지 관리자로 ping 명령어를 설치합니다. 설치 후 container3에서 container4로 ping을 보낸다면 통신이 되는 것을 확인 가능합니다. 실습을 하시면 아래 그림처럼 컨테이너가 생성되고 통신이 되는 것을 확인하실 수 있습니다.
2. Host 네트워크 사용
Host 네트워크를 사용하면 컨테이너가 호스트 네트워크와 동일한 네트워크 설정을 공유합니다.
코드 복사
# Host 네트워크를 사용하는 컨테이너 생성
docker run -d --name container5 --network host nginx
# 컨테이너5는 호스트와 동일한 IP 주소를 사용합니다.
3. Macvlan 네트워크 사용
Macvlan 네트워크는 컨테이너에 물리적 네트워크 인터페이스처럼 동작하는 인터페이스를 할당합니다. 이러한 방식은 실제 사무실 등에서 팀 별로 네트워크를 분할하여 사용하는 것처럼 Docker 컨테이너들 간의 그룹을 지어 네트워크를 분할할 수 있습니다. 이런 기능이 있다는 정도로 확인하셔도 괜찮겠습니다.
코드 복사
# Macvlan 네트워크 생성
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 macvlan_network
# Macvlan 네트워크를 사용하는 컨테이너 생성
docker run -d --name container6 --network macvlan_network nginx
결론
Docker 네트워크는 컨테이너 간의 통신을 설정하고 관리하는 데 중요한 역할을 합니다. 기본 브리지 네트워크부터 Host, Overlay, Macvlan까지 다양한 네트워크 드라이버를 제공하여, 다양한 요구 사항에 맞게 네트워킹을 구성할 수 있습니다. 네트워크의 이해와 활용은 Docker 컨테이너를 효율적으로 관리하고 배포하는 데 필수적이므로, 이 가이드를 바탕으로 Docker 네트워크를 잘 활용해 보시면 좋겠습니다. 필요하시다면 실습을 통해 좀 더 익히시는 것도 좋습니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'Docker' 카테고리의 다른 글
[Docker]#17 Volume - 데이터 유지 및 공유 가이드 (4) | 2024.08.29 |
---|---|
[Docker]#16 Volume - 볼륨과 마운트, 데이터 보존 방법 (2) | 2024.08.28 |
[Docker]#14 Dockerfile - 이미지 빌드 및 최적화 방법 (0) | 2024.08.26 |
[Docker]#13 Dockerfile 작성법 - 나만의 도커 이미지 만들기 (0) | 2024.08.23 |
[Docker]#12 Docker Hub - 공개 Docker 이미지 레지스트리 가이드 (1) | 2024.08.22 |