Docker 자동화 Nginx 역방향 에이전트
태그 (공백 구분): Docker Nginx Automated
이 글 쓴 이 는 jwilder 이 고 원문 주 소 는 Automated Nginx Reverse Proxy for Docker 입 니 다.
왜 Docker 는 역방향 대 리 를 사용 합 니까?
Docker 용 기 는 무 작위 IP 와 포트 가 할당 되 어 클 라 이언 트 각도 에서 주 소 를 찾 는 것 이 매우 복잡 합 니 다.기본적으로 IP 와 포트 는 호스트 에 만 사용 되 며 호스트 에 연결 되 지 않 는 한 외부 에 접근 할 수 없습니다.
호스트 포트 에 용 기 를 연결 하면 여러 용기 가 같은 호스트 에서 실행 되 는 것 을 방지 할 수 있 습 니 다.예 를 들 어 같은 시간 에 하나의 용기 만 80 포트 에 연결 할 수 있다.이것 또한 새로운 버 전의 용기 가 정지 되 지 않 고 출시 되 는 것 을 복잡 하 게 만 들 었 다. 왜냐하면 오래된 버 전 은 반드시 새로운 버 전이 시작 되 기 전에 먼저 멈 춰 야 하기 때문이다.
역방향 대 리 는 이러한 문 제 를 처리 하 는 데 도움 을 줄 수 있 으 며, 동시에 제로 정지 배치 의 어려움 을 줄 여 가용성 을 높 일 수 있다.
역방향 프 록 시 프로필 생 성
용기 가 시작 되 고 정지 되 었 을 때 역방향 프 록 시 설정 을 설정 하 는 것 은 복잡 할 수 있 습 니 다.일반적인 설정 은 수 동 으로 업데이트 해 야 합 니 다. 오류 가 발생 하기 쉽 고 시간 이 걸 립 니 다.
다행히도 Docker 는 containers 를 inspect 하고 IP, 포트, 기타 설정 메타 데 이 터 를 방문 하기 위해 원 격 API 를 제공 합 니 다.또한 용기 가 언제 시작 되 고 정지 되 는 지 알려 주 는 실시 간 이벤트 API 도 제공 합 니 다.이 API 들 은 자동 으로 역방향 프 록 시 설정 을 만 드 는 데 사 용 될 수 있다.
docker - gen 은 이 API 를 사용 하 는 작은 도구 로 용기 의 메타 데 이 터 를 템 플 릿 으로 내 보 냅 니 다.템 플 릿 이 렌 더 링 되 고 선택 한 알림 명령 이 실행 되 어 서 비 스 를 다시 시작 할 수 있 습 니 다.
docker - gen 을 사용 하면 Nginx 설정 을 자동 으로 생 성하 고 Nginx 가 바 뀌 었 을 때 다시 불 러 올 수 있 습 니 다.같은 방법 으로 Docker 로그 관리 에 사용 할 수 있 습 니 다.
Nginx 역방향 에이전트 Docker
이 예 를 들 어 Nginx 템 플 릿 은 Docker 용기 에서 가상 호스트 루트 를 사용 하 는 역방향 프 록 시 설정 파일 을 만 드 는 데 사 용 될 수 있 습 니 다.이 템 플 릿 은 golang text / template package 를 사용 하여 이 루어 졌 습 니 다.이것 은 일반적인
groupBy
템 플 릿 함 수 를 사용 하여 VIRTUAL_HOST
환경 변 수 를 통 해 그룹 을 나 누 어 실행 하 는 용 기 를 사용 합 니 다.이 는 용 기 를 옮 겨 다 니 며 부하 균형 백 엔 드 를 만 들 고 정지 배치 가 가능 하도록 간소화 했다.{{ range $host, $containers := groupBy $ "Env.VIRTUAL_HOST" }}
upstream {{ $host }} {
{{ range $index, $value := $containers }}
{{ with $address := index $value.Addresses 0 }}
server {{ $address.IP }}:{{ $address.Port }};
{{ end }}
{{ end }}
}
server {
#ssl_certificate /etc/nginx/certs/demo.pem;
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server_name {{ $host }};
location / {
proxy_pass http://{{ $host }};
include /etc/nginx/proxy_params;
}
}
{{ end }}
이 템 플 릿 은
docker-gen
을 사용 하여 실행 할 수 있 습 니 다.docker-gen -only-exposed -watch -notify "/etc/init.d/nginx reload" templates/nginx.tmpl /etc/nginx/sites-enabled/default
-only-exposed
- 용기 가 노출 된 포트 만 사용 합 니 다.-watch
- 시작 후 docker 용기 사건 을 감시 하고 템 플 릿 을 다시 생 성 합 니 다.-notify "/etc/init.d/nginx reload"
- 템 플 릿 생 성 후 nginx 설정 을 다시 불 러 옵 니 다.templates/nginx.tmpl
- nginx 템 플 릿./etc/nginx/sites-enabled/default
- 대상 파일.이것 은 두 용기 에 설 치 된
VIRTUAL_HOST=demo1.localhost
과 VIRTUAL_HOST=demo2.localhost
렌 더 링 템 플 릿 입 니 다.upstream demo1.localhost {
server 172.17.0.4:5000;
server 172.17.0.3:5000;
}
server {
#ssl_certificate /etc/nginx/certs/demo.pem;
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server_name demo1.localhost;
location / {
proxy_pass http://demo.localhost;
include /etc/nginx/proxy_params;
}
}
upstream demo2.localhost {
server 172.17.0.5:5000;
}
server {
#ssl_certificate /etc/nginx/certs/demo.pem;
#ssl_certificate_key /etc/nginx/certs/demo.key;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server_name demo2.localhost;
location / {
proxy_pass http://demo2.localhost;
include /etc/nginx/proxy_params;
}
}
테스트
나 는 이 설정 을 사용 하여 시험 하기 쉬 운 신뢰 할 수 있 는 구축 을 만 들 었 다.
nginx - proxy 용 기 를 실행 합 니 다:
$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock -t jwilder/nginx-proxy
VIRTUAL_HOST
환경 변 수 를 사용 하여 용 기 를 시작 합 니 다:docker run -e VIRTUAL_HOST=foo.bar.com -t ...
총결산
docker 용기 에 nginx 역방향 프 록 시 설정 을 만 들 기 위해 Docker API 와 일부 기본 템 플 릿 자동 화 를 사용 할 수 있 습 니 다. 이 는 배 치 를 간소화 하고 가용성 을 향상 시 킬 수 있 습 니 다.
단일 호스트 에서 실행 되 는 용기 에 매우 적합 하지만 원 격 호스트 생 성 설정 을 위해 서 는 자동 으로 발견 해 야 합 니 다.Docker 를 보면 이 문제 에 대한 해결 이 자동 으로 발 견 됩 니 다.
업데이트: 유사 한 관점 과 변종 이 있 는 다른 글 들 이 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
puppet 의 설치 배치 실례puppet 에 대한 설명 은 여기 서 상세 하 게 소개 하지 않 습 니 다. 여 기 는 주로 puppet 의 설치 방식 과 기본 모듈 의 응용 을 소개 합 니 다.다음은 바로 puppet 배치 설 치 를 시작 하 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.