아키텍처 구조도
- 프록시 서버는 Caddy 기반의 caddy-docker-proxy 사용
- Docker Label 사용하여 프록시/리버스 프록시 적용
- Label 이용한 자동 Caddyfile 작성
- 자동 TLS/HTTPS 적용
- Nginx와 비교
- 성능 상 차이가 없거나 우위에 있음
- Caddyfile 작성 난이도가 Nginx 설정보다 쉬움 (Apache와 비교하면..)
- 로드밸런싱과 다른 게이트웨이로서의 기능도 마찬가지로 제공
Database
Dockerfile
services:
mongodb:
container_name: mongodb
environment:
MONGO_INITDB_ROOT_PASSWORD: 루트 아이디
MONGO_INITDB_ROOT_USERNAME: 비밀번호는 비밀이야
image: mongodb/mongodb-community-server:7.0.12-ubuntu2204
labels:
caddy: localhost:31061
caddy.reverse_proxy: "{{ upstreams 27017 }}"
networks:
- caddy
ports:
- 31061:27017
pull_policy: always
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- mongodb_data:/data/db
- mongodb_config:/data/configdb
mysql:
container_name: mysql
environment:
MYSQL_DATABASE: health
MYSQL_PASSWORD: 비밀번호는 비밀이야
MYSQL_ROOT_PASSWORD: 비밀번호는 비밀이야
MYSQL_USER: 사용자 아이디
image: mysql:8.0
labels:
caddy: localhost:31060
caddy.reverse_proxy: "{{ upstreams 3306 }}"
networks:
- caddy
ports:
- 31060:3306
pull_policy: always
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
name: mysql_data
mongodb_data:
name: mongodb_data
mongodb_config:
name: mongodb_config
networks:
caddy:
external: true
name: caddy
기본 Docker Compose
services:
caddy:
container_name: caddy
environment:
- CADDY_INGRESS_NETWORKS=caddy
image: lucaslorentz/caddy-docker-proxy:2.9.1-alpine
networks:
- caddy
ports:
- 80:80
- 443:443
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
portainer:
container_name: portainer
expose:
- 9000
image: portainer/portainer-ce:latest
labels:
caddy: j11c106.p.ssafy.io
caddy.handle_path: /portainer/*
caddy.handle_path.0_reverse_proxy: "{{ upstreams 9000 }}"
caddy.redir: /portainer /portainer/
networks:
- caddy
pull_policy: always
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
jenkins:
container_name: jenkins
environment:
- JENKINS_OPTS="--prefix=/jenkins"
expose:
- 8080
image: jenkins/jenkins:latest
labels:
caddy: j11c106.p.ssafy.io
caddy.handle: /jenkins*
caddy.handle.reverse_proxy: "{{ upstreams 8080 }}"
networks:
- caddy
pull_policy: always
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
- jenkins_data:/var/jenkins_home
volumes:
caddy_data:
name: caddy_data
portainer_data:
name: portainer_data
jenkins_data:
name: jenkins_data
networks:
caddy:
name: caddy