도커 네트워크
- 도커는 컨테이너를 이용해서 어플리케이션을 격리 환경에서 실행
- 대부분의 어플리케이션은 외부의 사용자에게 서비스 제공이 목적
- 서비스를 제공하기 위해 네트워크 구성이 필요
- 가상 브릿지와 가상 네트워크 인터페이스 등을 사용
- 컨테이너 생성 시 기본적으로 bridge 네트워크로 설정
- 컨테이너 생성 시 네트워크 종류, dns, etc/hosts, hostname, 포트포워딩 등 설정
네트워크 종류(driver)
1. bridge
- 내부적으로 컨테이너끼리 서로 연결되어 있으면서 가상브릿지(docker0)를 통해 외부와 연결
- 필요에 따라 추가적으로 브릿지 생성 가능하며 그에 따라 새로운 가상브릿지 생성
docker network create
- 기본 설정일 경우 외부에서 컨테이너로 접속이 제한
- 외부에서 접근하려면 포트포워딩 설정 필요
docker container run -p 호스트포트:컨테이너포트
- 동일한 브릿지에 연결된 경우 어플리케이션(컨테이너)끼리 통신 가능
- 컨테이너 생성 시 --link 옵션으로 기존의 컨테이너를 이름으로 접근할 수 있게 설정
⇒ 컨테이너의 IP주소가 바뀔 수 있기 때문에 사용
docker network connect
명령어로 기존의 컨테이너에 다른 브릿지를 추가 연결(--link 옵션 가능)
docker run -itd --name <os_br> --network bridge centos
2. host
- 물리적인 호스트의 네트워크 인터페이스(스택)을 공유하는 형태 (컨테이너가 host의 네트워크를 그대로 가져다 사용)
⇒ 컨테이너에 별도의 IP 주소 등이 할당되지 않음
- 현재 시스템의 IP 주소를 통해서 접근 가능. 단, 포트번호가 겹치는 이미지를 함께 사용 할 수없음
- 장점은 별도의 설정 없이 외부에서 컨테이너로 접근 가능
- 추가 생성 불가
docker run -itd --name <os_host> --network host centos
3. null(none)
- 컨테이너에 네트워크를 할당하지 않는 형태
- 추가 생성 불가
docker run -itd --name <os_none> --network none centos
- inspect 창에서 보면 bridge는 IPAddress가 있고, host와 none은 IPAdddress가 존재하지 않는다.
- bridge, host는 외부 통신이 가능하고 none은 불가능하다.
<추가 네트워크>
4. macvlan
- mac 주소를 별도로 할당하는 방식
- 컨테이너에 mac 주소를 할당해서, 외부에서는 마치 호스트에 물리적인 인터페이스를 추가한 것처럼 인식하도록 IP 주소를 따로 할당
- 실제 IP 주소가 필요하고, 인터페이스의 부하 증가, 보안적인 위험 증가
5. ipvlan
- macvlan과 유사한 형태(기능적인 경량화)
6. overlay
컨테이너 생성 시 네트워크 할당
docker container run
: 기본은 bridge 설정
--network
옵션 사용 시 선택 가능
- 네트워크 인터페이스에서 하나의 포트는 하나의 프로세스(서비스)가 사용 (host 네트워크는 물리 시스템과 포트 공유)
커넥트
docker network connect
명령어로 만들어둔 컨테이너와 네트워크를 연결할 수 있음
- host 네트워크는 연결/제거할 수 없음
- 링크:
--link
옵션 사용 시 컨테이너를 이름으로 통신할 수 있음
- network connect 명령어의 옵션인 경우에는 양방향 가능
- docker container run 명령어의 옵션인 경우에는 단방향 가능