Search
Duplicate
📒

[Docker Container] 05-2. 도커 네트워크 종류 및 생성

상태
미진행
수업
Docker Container
주제
Docker
4 more properties
참고

사용자 정의 네트워크

NOTE
docker는 기본적으로 Host OS와 bridge 연결을 하며 —-net 옵션을 통해 설정가능하다!
네트워크 종류
docker network create로 사용자 정의 bridge network 생성!
사용자 정의 네트워크에 연결하면 Container는 Container의 이름이나 IP 주소로 서로 통신!

도커 네트워크 없이 통신

NOTE
docker container inspect [컨테이너 이름]
Bash
복사
mongoose.connect( 'mongodb://172.18.0.2:27017/swfavorites', { useNewUrlParser: true }, (err) => { if (err) { console.log(err); } else { app.listen(3000); } } );
JavaScript
복사
이런 방식도 있다는걸 알아두자! (귀찮음)
위의 명령어로 컨테이너의 IPAdress를 복사하여 연결해줄 수 있다!

네트워크 종류

NOTE
Docker 네트워크bridge, host, overlay등 목적에 따라 다양한 네트워크 드라이버를 제공한다.
생성할 때 docker network create --driver bridge my-net를 사용해서 어떤 네트워크 드라이버를 생성할지 정할 수 있다.

bridge 네트워크

하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있게 해준다.
디폴트 드라이버이다!

host 네트워크

컨테이너를 호스트 컴퓨터와 동일한 네트워크에서 돌리기 위해서 사용된다.
스탠드얼론 컨테이너의 경우, 컨테이너와 호스트 시스템 간의 격리가 제거됩니다 (즉, localhost를 네트워크로 공유함).

overlay 네트워크

여러 호스트에 분산되어 돌아가는 컨테이너들 간에 네트워킹을 위해서 사용된다.
여러 Docker 데몬 (즉, 서로 다른 머신에서 실행되는 Docker)이 서로 연결될 수 있습니다. 여러 컨테이너를 연결하는 구식의 / 거의 사용되지 않는 방법인 'Swarm' 모드에서만 작동합니다.

docker network ‘host’

NOTE
# Port 등록을 안했는데 자동으로 80으로 설정됨 docker run -d --name=nginx_host --net=host nginx:1.25.0 sudo netstat –nlp | grep 80 # -p 옵션으로 port를 연결한다 => docker-proxy를 이용 # 위의 방식은 호스트 운영체제에 직접 PID를 할당받아 서비스한다. ps -ef | grep [프로세스 ID] docker inspect nginx_host | grep IPAddress
Bash
복사
컨테이너에 별도의 IP가 부여되지 않는다. (PID 할당으로 진행했기 때문)

docker network 생성

NOTE
docker network create [-d(--driver) bridge] mynet # 네트워크 확인 docker network ls # 네트워크 정보 확인 route docker network inspect [네트워크 ID] ifconfig
Bash
복사
docker network 생성
docker run --net=mynet -it --name=net-check1 ubuntu:14.04 bash ifconfig route docker run --net=mynet -it --name=net-check2 ubuntu:14.04 bash brctl show docker network inspect mynet
Bash
복사
2개의 컨테이너를 mynet(사용자 정의 네트워크)에 연결
mynet 네트워크에 2개의 컨테이너가 연결됨
# net-check1에서 net-check2로 ping 통신 docker run --net=mynet -it --name=net-check1 ubuntu:14.04 bash ping -c 3 net-check2 # net-check2에서 net-check1로 ping 통신 docker run --net=mynet -it --name=net-check2 ubuntu:14.04 bash ping -c 3 net-check1
Bash
복사
사용자 정의 네트워크 구성을 통해, 컨테이너 이름으로 통신가능! (Docker DNS 기능)

docker network 생성 (대역폭)

NOTE
docker network create --driver bridge \ --subnet 172.30.1.0/24 \ # CIDR 표기 가능 (/24 = 255.255.255.0 과 같다) --ip-range 172.30.1.0/24 \ # subnet 이하 IP 범위조정 가능 --gateway 172.30.1.1 \ vswitch-net # 256개의 IP중 254개 사용 가능
Bash
복사
docker run --net=vswitch-net -itd --name=net1 ubuntu:14.04 docker run --net=vswitch-net -itd --name=net2 --ip 172.30.1.100 ubuntu:14.04 docker network inspect vswitch-net
Bash
복사
net1의 경우 ip가 gateway의 바로 다음인 2번으로 할당 net2의 경우 직접 설정해주어서 100번으로 설정

docker network connect | disconnect

NOTE
# 실행 중인 컨테이너에 새로운 네트워크 대역의 network를 연결한다. docker run -it --name=add-net ubuntu:14.04 bash
Bash
복사
docker network create --driver=bridge fc-net2 docker network connect fc-net2 add-net docker exec -it add-net bash ifconfig docker network disconnect fc-net2 add-net
Bash
복사
네트워크 생성하고 연결
add-net 컨테이너에 eth1 인터페이스가 추가됨 (disconnect하면 사라짐)

docker network topology

NOTE
도커 네트워크 구조
위의 과정을 실습으로 만들어본다. (web 단계에서는, Back네트워크와도 연결된다.)
# 네트워크 생성 docker network create --driver=bridge back-net docker network create --driver=bridge front-net # 컨테이너 생성 docker run --name=my-web -itd --net=front-net ubuntu:14.04 docker run --name=my-was -itd --net=back-net ubuntu:14.04 docker run --name=my-db -itd --net=back-net ubuntu:14.04 # 네트워크 추가 연결 docker network connect back-net my-web # 각 컨테이너 네트워크 확인 docker exec my-web route docker exec my-was route docker exec my-db route # 네트워크 연결된 컨테이너 확인 docker network inspect front-net # my-web docker network inspect back-net # my-web / my-was / my-db
Bash
복사
실습 코드