2017-10-27 3 views
1

모든 Docker 기반의 마이크로 서비스는 서로 이야기해야합니다. 그들은 컨테이너 이름을 사용하여 서로 이야기합니다. 따라서 Docker Swarm 또는 Kubernetes (w Flannel)로이 도구를 실행할 때 Docker DNS를 사용하여 컨테이너 이름을 IP 주소로 확인합니다.주어진 도커 컨테이너 이름이 설정된 mesos/marathon을 설정하십시오.

이제 Mesos + Marathon과 동일한 동일한 마이크로 서비스 세트를 실행하려고하는데 문제가 발생했습니다. 모든 마이크로 서비스 (Marathon app.App API 사용)를 시작하면 mesos에 'mesos-some_long_hash'라는 이름이 부여됩니다. 컨테이너가 시작되는 기계에 "docker ps"라고 입력하면이 이름을 볼 수 있습니다. 따라서 마이크로 서버는이 메소가 할당 된 컨테이너 이름으로 인해 서로를 찾을 수 없습니다.

실험을 위해 필자는 Marathon app.appContainer.DockerContainer API의 'parameters'를 사용하여 필요한 이름으로 컨테이너 이름을 지정해야했습니다. 마이크로 서비스는 작동하지만 Marathon은 이러한 "mesos-some_long_hash"이름을 예상하므로 혼란스러워합니다. 그것들은 배치에 붙어있는 것으로보고합니다.

마라톤 API를 통해 "mesos-some_long_hash"라는 이름을 원하지 않고 대신 내 이름 (서비스 이름)을 사용하는 방법을 알아야합니다. 마라톤 앱 API에서이 작업을 수행 할 명백한 것은 없습니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

편집 : 방금 ​​mesos에있는 containerizer에 대해이 사실을 발견했습니다. http://mesos.apache.org/documentation/latest/docker-containerizer/

컨테이너 이름을 변경할 수없는 것처럼 들리는가요? 이것은 끔찍한 일입니다! 메소 스나 마라톤 프리 커 아웃없이 컨테이너 이름을 지정할 수 없다면 누구가 마이크로 서비스 아키텍처를 수행합니까?

답변

0

당신은 메소/마라톤 프릭없이 메소


그들의 용기의 이름을 수없는 경우 어떻게 사람이 microservice 아키텍처를합니까에서 컨테이너의 이름을 캔트?

마이크로 서비스 아키텍처를 시작할 때 컨테이너에 대해 애완 동물로 생각해야합니다. 서버와 마찬가지로 (this answerthat blog post 참조). 컨테이너는 Mesos Agents 중 하나 인 어느 곳에서나 언제든지 시작하고 멈출 수 있습니다. 두 컨테이너를 한 서버에서 시작할 수 없으므로 이름을 지정할 수 없습니다.

+1

동의하고 [Mesos-DNS] (https://github.com/mesosphere/mesos-dns)와 같은 도구를 사용할 수 있습니다. – js84

1

해결책을 찾아 냈습니다.

저는 Docker 컨테이너를 내 "사용자"네트워크에서 실행하고 있으므로 Docker DNS 서비스에 의존합니다. docker 실행 명령에서 --network-alias 매개 변수를 사용하여 Docker DNS 서비스에서 별칭을 만들 수 있습니다. 서비스 이름을 입력하면 다시 작동하기 시작합니다. 컨테이너에 다양한 'mesos-uuid'이름이있는 경우에도 마찬가지입니다.

기본적으로 app.appContainer.DockerContainer.parameter 아래에 키 값 쌍을 추가합니다. 여기서 키는 'network-alias'이고 값은 서비스 이름입니다.

나는 또한 Mesos-DNS를 시도 할 수있는 것처럼 보입니다.