Docker 및 Traefik을 사용한 개발 환경

문제



Docker를 사용한 로컬 개발은 새로운 것이 아닙니다.
로컬 컨테이너 내보내기를 실행하여 일부 포트를 내보내십시오.
하지만 도커 호스트에서 충돌하는 포트가 동시에 여러 프로젝트로 작업하는 문제에 부딪혔습니다. 그리고 어떤 프로젝트가 어떤 포트에서 실행되고 있는지 기억하기 어렵습니다. 로컬 도메인이 좋은 해결책이 될 것입니다.
이 문제를 해결하기 위해 docker 및 traefik을 사용하여 로컬 개발 설정을 안내해 드리겠습니다.

개념



프로젝트에 도메인을 추가하기 위해 로컬 컴퓨터에 리버스 프록시를 설치합니다. Traefik( https://traefik.io/traefik )을 사용하여 이 작업을 수행합니다.
Traefik은 스스로를 클라우드 네이티브 애플리케이션 프록시라고 합니다.
Kubernetes 또는 docker와 같은 클라우드 컨텍스트에서 사용하기에 이상적입니다. Traefik 자체도 간단한 도커 컨테이너입니다. 그리고 이것은 도커 호스트에 포트를 노출하는 유일한 컨테이너가 될 것입니다. 다른 프로젝트의 컨테이너와 traefik 컨테이너는 동일한 도커 네트워크에 있습니다. Traefik은 클라이언트의 요청을 해당 컨테이너로 전달합니다.


요구 사항


  • 도커
  • 도커 구성
  • 선택한 IDE

  • 설정



    첫 번째 단계는 도커 네트워크를 만드는 것입니다.
    우리는 그것을 "웹"이라고 부를 것입니다. 서로 다른 docker-compose 스택이 서로 연결할 수 있도록 이 네트워크를 만들고 있습니다.

    docker network create web
    


    이제 우리는 traefik 컨테이너를 시작합니다.
    간단한 docker 명령을 실행하여 이를 수행할 수 있지만 이 경우 작은 docker-compose 파일을 사용하여 컨테이너를 구성합니다.

    version: '3'
    
    networks:
      web:
        external: true
    
    services:
      traefik:
        image: traefik:v2.3
        command:
          - "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
        restart: always
        ports:
          - "80:80"
          - "8080:8080" # The Web UI (enabled by --api)
        networks:
          - web
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
    


    이 파일을 디렉터리에 저장하고 다음을 입력하여 컨테이너를 시작합니다.

    docker-compose up -d
    


    컨테이너가 성공적으로 시작된 후 http://localhost:8080을 통해 traefik 대시보드에 액세스할 수 있습니다.

    이제 우리는 작은 웹 프로젝트를 시작하고 있습니다. 예를 들어 이것은 단지 작은 웹사이트입니다. 이 포스트에서는 docker-compose.yml 파일만 보여드리겠습니다. 여기에서 전체 폴더 구조 및 traefik 설정을 찾을 수 있습니다. https://github.com/flemssound/local-dev-docker-traefik

    version: '3.3'
    
    networks:
      web:
        external: true
    
    services:
      application:
        image: nginx
        networks:
          - web
        # Here we define our settings for traefik how to proxy our service.
        labels:
          # This is enableing treafik to proxy this service
          - "traefik.enable=true"
          # Here we have to define the URL
          - "traefik.http.routers.myproject.rule=Host(`myproject.localhost`)"
          # Here we are defining wich entrypoint should be used by clients to access this service
          - "traefik.http.routers.myproject.entrypoints=web"
          # Here we define in wich network treafik can find this service
          - "traefik.docker.network=web"
          # This is the port that traefik should proxy
          - "traefik.http.services.myproject.loadbalancer.server.port=80"
        volumes:
          - ./html:/usr/share/nginx/html
        restart: always
    


    이제 http://myproject.localhost을 통해 웹 사이트에 액세스할 수 있습니다.
    HTML 폴더의 모든 항목은 nginx 컨테이너의 공용 폴더에 마운트됩니다.
    nginx 포트를 호스트에 직접 노출하는 대신 traefik을 통해 프록시합니다.
    Traefik 대시보드에서도 볼 수 있습니다.


    다른 프로젝트를 만들려면 myproject 폴더를 복사하고 docker-compose.yml을 조정하고 시작합니다. 이제 우리는 예를 들어 포트 80의 mysecondproject.localhost에서 두 번째 프로젝트를 실행하고 있으며 프로젝트에서 충돌하는 포트에 대해 걱정할 필요가 없으며 이름으로 액세스할 수 있습니다.

    참조


  • 트레픽: https://traefik.io/traefik
  • Nginx 컨테이너: https://hub.docker.com/_/nginx
  • 예제 프로젝트 및 설정: https://github.com/flemssound/local-dev-docker-traefik
  • 좋은 웹페이지 즐겨찾기