Docker 네트워킹
1. Host 내에서의 네트워크
- Docker 간의 네트워크
- bridge를 사용하여 해결
- ovs(Open vSwitch) 같은 open bridge를 사용하여 대체하면 port mirroring 같은 기능을 쓸수 있다.
2. Host 간의 네트워크
- 서로 다른 host 간의 연결과 container 연결
- overlay(VXLan)을 사용한다.
- bridge 가 docker0 이고 나머지는 dummy network 이다.
* 기본 네트워크
- Swam 설치시는 환경이 바뀐다.
- overlay는 기본에서 만들지 못한다.
- --net=bridge가 default
Docker 설치시 자동으로 생성되는 기본 네트워크 - none: 네트워크 구성 요소를 가지지 않음.
: 다른 네트워크에 연결할때 나중에 만들기 위해 사용한다. - host: 컨테이너가 호스트 네트워크를 사용 . 컨테이너가 호스트하고 동일한 네트워크를 사용하게 된다. . bridge를 사용하지 않아 바로 나가므로 빠르지만 보안에 취약 - bridge: 리눅스 가상 브릿지 . 기본 bridge로 생성된다. |
- --net=container_name과 같이 쓸수도 있다.
- 이렇게 사용할 경우 network 격리를 제거하는 것으로 볼 수 있으면 localhost로 통신 가능하다.
- icc를 false로 하면 내부 통신이 안된다.
- masquerade 는 외부 통신 가능 여부이다.
- 연결된 container의 정보도 볼 수 있다.
* 사용자 정의 네트워크 생성하기
브릿지 네트워크 사용자가 직접 정의하여 생성할 수 있다. : docker network create
Docker network에 사용하는 옵션들.
옵션 |
설명 |
-d, --driver="bridge" |
네트워크를 관리하는데 사용하는 드라이버 |
--aux-address=map[] |
네트워크 드라이버가 사용하는 보조 ipv4 또는 ipv6 주소 |
--gateway=[] |
마스트 서브넷에 대해 사용하느 주소 |
--ip-range=[] |
서브넷 컨테이너의 ip 할당에 사용 |
--ipam-driver=default |
ip 주소 관리 드라이버 |
-o, --opt=map[] |
드라이버의 특정 옵션을 설정 |
--subnet=[] |
CIDR 형식의 서브넷으로 나타내는 네트워크 세그먼트 |
- 옵션을 안주면 기본으로 설정
- 새로 생성한 bridge를 통해 container를 올려보자.
- 이렇게 생성되면 bridge 0과 통신은 안된다.
* 네트워크에서 컨테이너 실행하기
docker run --net=<네트워크> 옵션 사용
. --net=container:<컨테이너>: 다른 컨테이너와 동일한 네트워크 연결 . --net=host : 호스트와 동일한 네트워크 연결 네트워크 정보 확인: docker network inspect 실행 중인 컨테이너에 특정 네트워크 연결 : docker network connect <네트워크> <컨테이너> 실행 중인 컨테이너에 특정 네트워크 제거: docker network disconnect <네트워크> <컨테이너> |
- 양쪽에다 연결해보자. 먼저 none으로 연결한다.
- 이렇게 연결되 container를 route, firewall등으로 만들어 사용할 수 있다.
- single host에서는 link 라는 정보로 서로 식별 한다.
* Linking containers
- EXPOSE를 통해 반드시 필요한 포트를 노출해주어야 한다. (internal을 위해서만 사용되는 것이다.)
컨테이너 링크: 링크된 원본 컨테이너는 연결 정보를 링크한 대상 컨테이너에 전달 - 대상 컨테이너의 /etc/hosts 파일 자동 갱신 - 원본 컨테이너 실행시 다음 설정의 환경 변수가 대상 컨테이너에 전송 . --env . Dockerfile의 ENV 인스트럭션 . 원본 컨테이너에서 노출한 포트(주소, 포트 번호, 프로토콜) |
#docker run --name sql -e MYSQL_ROOT_PASSWORD=test -it mysql |
- --link 옵션을 사용하여 연결한다.
- --link=<name>:<alias>
- link 된 이후에는 alias로 사용하여 접속하는게 좋다. (container가 바뀌면 변경된 ip가 hosts에 등록 된다.)
#docker run -it --rm --link=sql:db busybox |
- link된 DB ENV가 모두 올라온다.
- 이렇게 연결되어 놓으면 sql이 내려갔다 올라와도 자동으로 연결 된다.
* IP를 확인할 수 있는 스크립트를 만들어 사용하자.
#!/bin/sh exec docker inspect --fromat '{{.NetworkSetting.IPAdress}}' "$@" |
* 멀티 호스트 네트워크 생성
- swarm 모드 enable상태 에서 가능
멀티 Docker 호스트간 네트워크 연결: 오버레이 네트워크 오버레이 네트워크 사용 요구사항 1. swarm 모드 구성 2. Key-value 스토리지 구성 |
'디지털 양피지 > Docker' 카테고리의 다른 글
5. Docker Swarm (0) | 2017.06.29 |
---|---|
5. Docker Compose (0) | 2017.06.29 |
4. 컨테이너 스토리지 (0) | 2017.06.28 |
4. 컨테이너 관리 (0) | 2017.06.28 |
4. Dockerfile 실습 (0) | 2017.06.28 |