728x90

컨테이너 간 통신(네트워크) 명령어

1. 컨테이너 통신 방식

도커 데몬을 실행하게 되면 docker0라고 하는 도커 네트워크 인터페이스가 생긴다. 도커 네트워크 인터페이스는 virtual ethernet bridge이고 브릿지 네트워크를 지원하는 가상 네트워크이다. 브릿지 네트워크는 도커 컨테이너가 가지고 있는 IP와 Host 이더넷 또는 물리 장비가 가지고 있는 네트워크를 연결해주는 역할을 한다. 브릿지 네트워크를 지원하기 위해서 docker0는 내부적으로 NAT서비스와 포트 포워딩 기능을 제공한다. 직접 도커가 지원하는 것은 아니고 IPtables로 해준다. virtual ethernet bridge : 172.17.0.0/16 값을 가지는 브릿지 네트워크가 docker0이고 브릿지 네트워크 안에서 docker0는 172.17.0.1 IP를 가지고 게이트웨이 역할을 한다. 컨테이너의 게이트웨이 역할과 L2통신을 지원해준다. 모든 컨테이너는 외부 통신을 docker0를 통해 진행한다. 컨테이너가 실행되면 172.17.x.x로 순차적으로 가상 IP를 할당한다.

 

-NAT : Network Address Translation의 약자로 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법이다.

-IPtables : iptables 시스템 관리자 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다.

 

2. 컨테이너 포트를 외부로 노출

클라이언트는 eth0라는 인터페이스를 통해서만 들어올 수 있다. eth0에서 컨테이너까지 연결될 수 있도록 포트 포워딩이 진행되야한다.

-p 80:80 -p 호스트 포트:컨테이너 포트

-p 8080로 하면 실제로는 -p randomport:8080이 된다.

-P는 컨테이너 내부에서 도커 파일의 EXPOSE로 정의되어있는 포트에 맞춰서 렌덤 포트가 자동으로 맞춰진다.

 

3. user-defined bridge network 생성 방법

docker network create --driver bridge --subnet xxx.xxx.xxx.x/24 --gateway xxx.xxx.xxx.xxx mynet

subnet을 정해주지 않으면 docker0가 172.17.0.1을 사용하고 있으므로 172.18.0.1로 된다.

gateway를 생략하면 xxx.xxx.xxx.1번으로 된다.

 

docker network ls

위의 명령어는 docker의 네트워크 확인하는 명령어이다.

 

docker run -d —-name appjs —-net mynet —-ip 192.168.100.100 -p 8080:8080 smliux/appjs

위의 명령어는 docker에서 유저가 정의한 네트워크를 실행할 때의 명령어이다.

-ip 생략하면 순차적으로 알아서 생긴다. ex) 192.168.100.001 , 192.168.100.002 등등

 

4. 컨테이너끼리의 통신

프론트 컨테이너와 백엔드 컨테이너가 통신을 할 때를 예를 들면 wordpress가 있는데 wordpress는 웹페이지를 쉽게 제작할 수 있게 도와주는 Tool이다. wordpress 안에는 아파치 웹서버가 내장되어 있다. 또한 wordpress에서 만들어진 데이터는 MySQL에서 저장되게 구성되어있다.

 

mysql 실행

docker run -d —-name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_PASSWORD=pass mysql

 

wordpress 실행

docker run -d —-name wordpress —-link mysql:mysql -e WORDPRESS_DB_PASSWORD=pass -p 80:80 wordpress

컨테이너와 컨테이너끼리의 통신은 --link를 통해서 연결된다. 컨테이너 이름:원하는 이름

 

728x90

+ Recent posts