외부 Docker 컨테이너에 IP를 붙여 직접 액세스하는 방법(사내 서버용)

3491 단어 도커
자 PC가 아니라 사내에 있는 서버에 Docker 컨테이너를 다수 기동해 클라이언트로부터 직접 컨테이너에 액세스 하는 방법(주로 개발, 사내 서버용).

docker 컨테이너의 포트를 바꾸어 docker 호스트에 맵핑하거나 docker 호스트에서 proxy를 지어서 액세스하는 방법은 많이 나오는데, 별로 나오지 않으므로 남겨 둡니다. 이 방법의 장점은 용도별로 호스트명이 따를 수 있는 것과 http://servername:8080 와 같이 일일이 포트 번호를 생각하지 않아도 된다는 것입니다.

결론


  • 라우터에서 컨테이너 IP로 정적 경로를 끊습니다
  • docker 서버에서 ip4를 forward

  • 구성도



    아래와 같은 네트워크였을 경우의 예.
  • 사내 네트워크(클라이언트, 라우터, 서버)
    192.168.0.0/24
  • docker 컨테이너(서버 내의 docker 컨테이너)
    172.21.0.0/24



  • 설정



    이 예제에서는 클라이언트에서 nginx 컨테이너에 직접 액세스합니다. Docker 서버는 Linux.

    docker 컨테이너



    아래와 같이 브리지 네트워크를 만들어 컨테이너에 IP를 붙인다.

    docker-compose.yml
    version: '3.6'
    
    networks:
      share_nw:
        driver: bridge
        driver_opts:
          com.docker.network.bridge.name: docker1
        ipam:
          driver: default
          config:
            - subnet: 172.21.0.0/24
    
    services:
      nginx:
        image: nginx:latest
        networks:
          share_nw:
            ipv4_address: 172.21.0.10
    
    

    라우터



    설명서를보고 라우터의 LAN 측 정적 라우팅을 구성합니다.
    이번 예에서는 네트워크: 172.21.0.0/24 → 게이트웨이: 서버의 IP(192.168.0.10)로 한다.

    예)
    htps //w w. 내일 s. 코 m/jp/쏙 rt/후Q/1011706/

    Docker 서버



    IPv4 포워딩을 활성화합니다.
    sudo vi /etc/sysctl.conf
    net.ipv4.ip_forward=1
    
    reboot
    

    확인



    클라이언트 PC에서 ping 172.21.0.10 라든지 해본다.

    조금 사용하기 쉽습니다.



    사내(간이) DNS 서버 구축



    dnsmasq라고 하는 간이 DNS 서버의 컨테이너를 기동해, 각 컨테이너의 IP를 이름 해석할 수 있도록 해, 클라이언트의 DNS는 dnsmasq의 IP로 해 둔다(라우터의 DHCP로 DNS를 dnsmasq의 IP를 배부하도록 설정한다) .

    dnsmasq는 아래와 같은 설정을 해 둔다.
    nginx-server.example.local     172.21.0.10
    

    dnsmasq (docker hub)
    htps : // 후 b. 도 c r. 이 m/세아 rch? q = ds sma sq & type = 속눈썹

    웹을 통해 컨테이너 시작/중지



    Portainer가 뭐 뭐 사용하기 쉽다. web 경유로 컨테이너를 기동/정지, image의 pull나 조작등을 할 수 있습니다.

    좋은 웹페이지 즐겨찾기