디지털 양피지/Docker2017. 6. 28. 17:34

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
Posted by 빨간 양말