컨테이너간의 통신(네트워크)
컨테이너는 어떻게 통신하나요?
✅ 컨테이너 네트워크의 동작 원리에 대해서 알아보자
위의 박스는 linux의 docker host이다.
docker demon이 start되면 docker0라는 docker network 인터페이스가 생긴다.
docker0 인터페이스는 virtual ethernet bridge, bridge네트워크를 지원해주는 가상 네트워크가 된다.
bridge네트워크
컨테이너가 가지고 있는 IP대역대와, 실제 물리장비가 또는 docker host가 가지고 있는 네트워크를 연결하는 연결고리 역할을 하는 것이다.
bridge네트워크를 지원해주기 위해서 docker0는
내부적으로 NAT(Network address translation)서비스와 Port forwarding 기술을 지원해주고 있다.
docker0 자체는 172.17.0.1 아이피를 가지고 컨테이너의 게이트웨이 역할을 한다.
모든 컨테이너는 외부통신을 docker0를 통해 진행된다.
컨테이너가 run될시 가상의 아이피가 하나씩 제공되게 된다. 컨테이너는 docker0를 통해 호스트의 ethnet을 통해 외부로 통신을 할 수 있고, 외부에서는 ethnet을 통해 docker0를 통해 컨테이너로 연결되서 Port forwarding이 된다.
eth0
호스트의 이더넷의 인터페이스
docker0
브릿지 인터페이
컨테이너 포트를 외부로 노출 할 수 있어요?
nginx 컨테이너가 run 되면 172.17.0.2:80 을 열러서 서비스를 제공한다.
컨테이너에 있는 웹서비스에 클라이언트 사용자가 접속하려면 eth0라는 인터페이스를 통해서 접근해야한다.eth0부터 nginx 까지 연결되도록 하는 port forwording이 제공되어야 한다.
docker run --name web -d -p 80(hostPort):80(containerPort) nginx:1.14
호스트의 port는 중복해서 사용될 수 없다.
위에서 hostPort에 80을 사용해서 nginx에 연결했다면,
다른 port번호를 이용해서 예를들면 8080을 이용해서 appjs에 연결해주어야 한다.
docker run --name web -d -p 80(hostPort):80(containerPort) nginx:1.14
docker run --name web -d -p 80(hostPort):80(containerPort) appjs
이렇게는 사용할 수 없다.
하지만 nginx의 경우 여러개의 80포트를 만들어서 실행 할 수 있다.
172.17.0.3:80, 172.17.0.4:80, 172.17.0.5:80 이렇게 열리게 된다.
docker run --name web -d -p 80(hostPort):80(containerPort) nginx:1.14
docker run --name web -d -p 80(hostPort):8080(containerPort) appjs
이렇게는 가능하다.
컨테이너 네트워크를 추가 할 수 있나요?
user-defined network
Static IP를 할당하는 방법에 대해서 알아보자
user-defined bridge network 생성
docker0는 Static IP를 설정할 수 없지만,
user define network는 Static IP를 설정할 수 있다.
컨테이너 끼리 통신은 어떻게 하나요?
멀티 티어 서비스
mysql데이터베이스와 wordpress 컨테이너가 프론트엔드, 백엔드로 통신하는 방법에 대해서 알아보자
컨테이너를 이용한 server & client 서비스 운용
WORDPRESS
wordpress 웹페이지를 만들 수 있게 도와주는 웹 애플리케이션 중 하나이다.
docker run -d --name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWOR=wordpress -e MYSQL_PASSWORD = wordpress mysql:5.7
docker run -d --name wordpress --link mysql(앞의 컨테이너 이름):mysql(원하는이름) -e WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4
실습
컨테이너 네트워크 사용하기
user defined network
고정 IP 설정
https://www.youtube.com/watch?v=jOX80bXND2w&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=21