단일 Ubuntu 서버에서 Docker 여러 컨테이너에 고유한 공개 호스트 이름 제공

단일 Ubuntu 서버에서 Docker 여러 컨테이너에 고유한 공개 호스트 이름 제공

Kubernetes의 번거로움 없이 단일 시스템에서 다양한 호스트 이름을 제공하기 위해 여러 Docker 컨테이너를 설정하려고 합니다.

CONTAINER ID        IMAGE               COMMAND             STATUS              NAMES
673394ef1d4c        busybox             "top"               Up 45 seconds       nostalgic_shockley
d85756f57265        busybox             "top"               Up 51 seconds       high_albattani

내가 도메인을 가지고 있다고 가정해 보겠습니다 xyz.com. 로 alpha.xyz.com라우팅 하고 싶습니다 .nostalgic_shockleybeta.xyzhigh_albattani

찾아보니 /etc/hostname로컬 호스트 이름이 있습니다.

root@saag:/home/root# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
...
root@saag:/home/root# cat /etc/hostname
saag
...
root@saag:/home/root# cat /etc/hosts
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

개별 Docker IP 주소에 호스트 이름을 할당하려고 시도했지만 /etc/hostname여전히 컨테이너에 연결할 수 없습니다.

또한 내 도메인 관리 패널에서... 이 호스트의 IP 주소에 alpha.xyz.com대한 레코드를 설정해야 합니까 ?beta.xyz.com

답변1

왠지 당신은 잘못된 길을 가고 있다고 생각합니다. 내부 Docker 네트워크는 호스트의 외부 네트워크에 표시되지 않습니다. 호스트는 트래픽을 라우팅해야 합니다.

일반적으로 외부 세계와의 연결을 허용하려고 합니다.어떤 서비스에(즉, 대부분의 경우 TCP 포트) 도커 컨테이너 내에 있습니다.

HTTP에 관해 이야기하고 두 컨테이너 모두에 포트 80(또는 443)을 원하는 경우 포트를 외부 인터페이스에서 두 컨테이너로 전달할 수 없기 때문에 포트를 라우팅하는 것만 큼 간단하지 않습니다. 따라서 제가 선호하는 솔루션은 두 개의 서로 다른 DNS 이름에 대해 두 개의 가상 호스트를 사용하여 이름 기반 가상 호스팅을 수행하고 트래픽을 해당 Docker 컨테이너로 전달하는 호스트 시스템에 Apache를 두는 것입니다.

참고: 외부 네트워크에서 Docker 컨테이너로 매핑할 다른 포트가 있는 경우 일부 더 간단한(네트워크 기반) 방법(예: 일부 iptables 기반 전달 또는 호스트 포트 매핑)이 작동합니다.

답변2

또한 내 도메인 관리 패널에서... alpha.xyz.com 및 beta.xyz.com에 대한 a-레코드를 이 호스트의 IP 주소로 설정해야 합니까?

도메인 관리 패널은 당신이해야 할 것입니다시작하세요.Docker나 컨테이너 자체는 무(無)에서 하위 도메인을 만들 수 없습니다. 먼저 DNS 서비스 공급자 내에서 생성되어야 합니다.

완료되면 Docker 호스트는 Docker가 제공하는 모든 기능(iptables TCP/UDP 포트 전달이라고 가정)을 사용하여 올바른 컨테이너로 패킷을 라우팅할 수 있습니다. 또는 역방향 프록시를 사용하여 HTTP 요청을 라우팅할 수 있습니다.

이 작업을 수행하기 위해 컨테이너 호스트 이름을 변경할 필요는 없습니다.


(기술적으로 DNS는 프로토콜 내에서 동적 등록을 지원하지만 대부분의 서비스 제공업체는 이를 전혀 지원하지 않거나 표준 DNS 기능 대신 맞춤형 API를 사용해야 합니다.

게다가 기계는 DNS 공급자를 통해 인증할 수 있는 방법이 있어야 하는데 이를 위한 좋은 범용 시스템이 없습니다. 결과적으로 이러한 자동 하위 도메인 생성은 실제로 Active Directory에서만 거의 독점적입니다.)

관련 정보