도메인 경로를 각각의 도커에 할당하기 위한 최소 구성도


복수개의 도커에 다양한 도메인이 할당되어 도커에 접근이 되어야하기때문에 , 라우팅을 잘 관리하는 것은 중요한요소입니다.

접근과정 : 도메인 → 공유기 → 포트포워딩 → VMOS → PROXY → 도커 인스턴스

홈 네트워크라고, 하면 위와같은 순서로 도커가 제공하는 서비스에 접근을 할것이며, 

VMOS에 유입되는 Endpoint를 패턴별로 ,  Proxy(Nginx)를 통해 도커 인스터로 유도해야할것입니다.



도메인을 공유기에 연결

가정인터넷일 경우 유동IP일 경우가 대부분이며 IP가 변경되어도 도메인이 대상을 찾을수 있게 고정해주는 기능이

DDNS 기능입니다. 

-IPTIME DDNS


도메인을 생성해주는 도메인생성 대행 플랫폼(여기의 샘플은 가비아)을 통해 도메인 생성이 가능하며

도메인 생성후 CNAME규칙으로 서브도메인을 모두 동일한 DDNS의  도메인으로 연결합니다.



외부 웹으로 연결되는 포트(80,443)를 내부IP로 모두 포트포워드를 합니다.

다음에 설명될 NGINX가 띄워질 포트입니다.


Nginx Proxy Manager

  • 인입되는 도메인의 패턴(PROXY감지)에 따라 특정 IP로(도커 컨테이너) 유도 


version: '2'
services:
  app:
    image: jc21/nginx-proxy-manager:2.9.11
    environment:
      DB_MYSQL_HOST: db
      DB_MYSQL_NAME: npm
      DB_MYSQL_PASSWORD: npm
      DB_MYSQL_PORT: '3306'
      DB_MYSQL_USER: npm
    volumes:
    - /mnt/datac/docker/nginx/data:/data
    - /mnt/datac/docker/nginx/letsencrypt:/etc/letsencrypt
    ports:
    - 9980:80/tcp
    - 9981:81/tcp
    - 9443:443/tcp
    labels:
      io.rancher.scheduler.affinity:host_label: server_name=main
      io.rancher.container.hostname_override: container_name
  db:
    image: jc21/mariadb-aria:latest
    environment:
      MYSQL_DATABASE: npm
      MYSQL_PASSWORD: npm
      MYSQL_ROOT_PASSWORD: npm
      MYSQL_USER: npm
    volumes:
    - /mnt/datac/docker/nginx/mysql:/var/lib/mysql
    labels:
      io.rancher.scheduler.affinity:host_label: server_name=main
      io.rancher.container.hostname_override: container_name


초기 계정

더자세한 기능 참고 : https://github.com/jlesage/docker-nginx-proxy-manager


위 도커 스크립트를 실행 하게 되면, Rancher에서 server의 main영역에 1 인스턴스로 proxy 서버가 구동되게 된다.

이제 서브도메인 규칙에따라 다양한 서비스의 도커에 연결이 가능합니다.



웹노리 도메인화면 샘플


  •  서브도메인 규칙에의해 다양한 도커로 작성된 서비스로 연결이 가능합니다.


자동갱신되는 무료 SSL(Let's Encrypt) 도 지원하기때문에 서비스를 띄울때  각 웹서비스마다 SSL을 탑재하여 띄울필요없이 Nginx에서 SSL을 자동관리합니다.




  • No labels