2017-12-13 10 views
0

나는 스스로 만든 프로토콜을 시뮬레이트하는 Java 프로그램을 가지고 있습니다. 이 포트는 실행중인 시스템의 지정된 IP 주소와 포트 번호에 바인딩됩니다. 여러 네트워크 카드가있는 동일한 컴퓨터에서이 프로그램의 여러 인스턴스를 실행하려고합니다. Docker를 사용하여이 작업을 수행 할 수 있습니까 (동료가 제안했지만 나에 대해 많이 알지 못합니다). 내 다른 계획은 브리지 인터페이스가있는 컴퓨터에서 여러 VM을 실행하는 것이지만 대신 Docker를 사용하는 것과 비교하여 리소스 낭비라고 생각합니다 (아직 읽은 내용을 바탕으로 아이디어를 파악하는 데 어려움이 있음).Docker에서 동일한 프로그램이 여러 개 실행되는 경우

실행되면 프로그램은 메시지/패킷을 기다리는 데몬처럼 백그라운드에서 실행되며 프로세스를 강제 종료하여 중지 할 수 있습니다.

+1

Java 응용 프로그램을 다른 로컬 주소에 바인딩하기 만하면 * 도커가 없어도 가능합니다. 어떠한 종류의 컨테이너 화/가상화도 필요 없습니다. Docker로도 할 수 있습니다. – larsks

+1

질문 : Docker로 달성 할 수 있습니까? 가능합니다. – Jesse

답변

0

몇 명의 의견 작성자가 언급했듯이 프로그램의 여러 인스턴스를 시스템의 컨테이너로 실행할 수는 없으며 여러 개의 IP가있는 경우 컨테이너 밖에서도 프로그램을 실행할 수 있습니다 서비스 포트 바인딩에 사용할 수있는 주소).

질문은 아마도 디자인 중 하나 일 것입니다. 어떻게하면 Java 서비스 응용 프로그램으로 향하는 트래픽을 배포하고 싶습니까? 실제 IP 주소 당 하나를 원할 경우 --network=host을 사용하여 컨테이너를 실행하고 응용 프로그램을 특정 IP에 직접 바인딩 할 수 있습니다. 예를 들어/지시문을 사용하여 해당 IP를 특정 IP로 지정할 수 있습니다. 기본적으로 Docker는 시스템에 브리지 네트워크를 만들고 컨테이너는 사설 네트워크 IP로 시작하며 호스트 포트의 각 컨테이너는 해당 컨테이너에 대해 port binding configuration까지 노출됩니다. 분명히 iptables 또는 좀 더 높은 수준의 프론트 프록시를 사용하여 원하는대로 여러 실제 네트워크 주소에서 컨테이너 네트워크로 사용자 정의 라우팅을 수행 할 수 있습니다.