Docker-ambassador


@seapy

2014. 7. 30
Docker Korea

AMBASSADOR 컨테이너를 이용한 

서버를 넘나드는 연결 


Cross-Host linking using Ambassador Containers


HOST

54.191.106.107

# 레디스 서버 실행
$ docker run -d --name redis crosbymichael/redis 

# ambassador 실행
$ docker run -it --rm --link redis:redis --name redis_ambassador -p 6379:6379 svendowideit/ambassador 

CLIENT

54.191.140.233

# ambassador 실행
$ docker run -it --name redis_ambassador --expose 6379 -e REDIS_PORT_6379_TCP=tcp://54.191.106.107:6379 svendowideit/ambassador
호스트의 IP, 포트번호를 환경변수로 설정

# redis 클라이언트 실행
$ docker run -i -t --rm --link redis_ambassador:redis relateiq/redis-cli

동작방식


socat 유틸리티를 이용해서 
$ socat TCP4-LISTEN:6379,fork,reuseaddr TCP4:172.17.0.136:6379 

svendowideit/ambassador
Dockerfile 실행 명령어 한줄
CMD     env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/'  | sh && top
"REDIS_PORT_1234_TCP" 환경변수에서 PORT와 TCP사이의 포트 번호를 가져와서 TCP4-LISTEN할당. 실제 매핑주소, 포트를 TCP4에 할당 


환경변수로 주어진 데이터를 ambassador 컨테이너가 입력받은 포트 그대로 expose


SOCAT

(SOcket CAT)

두개의 양방향 바이트 스트림을 연결하고 데이터를 전송.
포트포워딩등 다양한 용도로 사용된다.

socat 문서

다양한 사용예

사용된 이미지 Dockerfile


svendowideit/ambassador

Docker-ambassador

By ChangHoon Jeong

Docker-ambassador

  • 3,329