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