Cloudflare Tunnel을 Docker로 설치하고 로컬 포트를 인터넷에 안전하게 터널링하는 방법을 단계별로 자세히 안내합니다.
Cloudflare 준비 및 터널 생성
-
Cloudflare 계정에 가입하고 도메인을 추가하세요.
-
Cloudflare Zero Trust 또는 Access 대시보드에서 “Tunnel”을 생성합니다.
-
터널 이름을 지정하고 생성합니다.
-
-
터널 인증을 위해 cloudflared를 설치한 후 다음 명령으로 로그인합니다:
textcloudflared tunnel login
-
브라우저에서 인증 절차가 진행됩니다. 인증 완료 후 credentials 파일이 발급됩니다.
-
-
터널을 생성합니다:
textcloudflared tunnel create <터널-이름>
-
UUID와 .json credentials 파일이 생성됩니다.
-
DNS 라우팅 및 설정파일 구성
-
터널을 도메인에 연결합니다:
textcloudflared tunnel route dns <터널-이름> <서브도메인.example.com>
-
예: app.example.com을 터널에 연결.
-
-
credentials 파일(.json)을 Docker 프로젝트 디렉토리(예시: ./cloudflared)에 복사합니다.
-
cloudflared 설정 파일(config.yml)을 작성합니다:
texttunnel: <터널-이름>
credentials-file: /etc/cloudflared/<터널-id>.json
ingress:
- hostname: app.example.com
service: http://my-app:3000
- service: http_status:404
Docker Compose 구성 예시
-
아래는 cloudflared와 로컬 서비스 컨테이너를 연결하는 docker-compose.yml 기본 예시입니다:
textversion: '3.8'
services:
my-app:
image: your-image
container_name: my-app
expose:
- 3000
networks:
- app-network
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
command: tunnel --config /etc/cloudflared/config.yml run
volumes:
- ./cloudflared:/etc/cloudflared
networks:
- app-network
networks:
app-network:
driver: bridge
-
여기서 my-app이 실제로 노출시킬 로컬 서비스입니다.
-
Docker 컨테이너 실행 및 점검

-
모든 파일을 프로젝트 디렉토리에 준비했다면, 다음 명령으로 컨테이너를 실행합니다:
textdocker compose up -d
-
cloudflared가 config.yml에 지정된 서비스(예: my-app:3000)로 트래픽을 프록시합니다.
-
-
Cloudflare DNS에서 서브도메인(CNAME)이 tunnel의 .cfargotunnel.com 주소를 가리키는지 확인하세요.
-
실제 도메인(예: https://app.example.com)으로 접속하면 로컬 서비스가 Cloudflare Tunnel을 통해 외부에서 안전하게 접근됩니다.
이렇게 설정하면 로컬 포트를 외부에 개방하지 않고, Cloudflare의 보안 인프라를 활용해 안전하게 터널링할 수 있습니다.