Docker 서비스 발견 (1) -- 자동화 Nginx 역방향 에이전트
7431 단어 Docker
본문 jwilder Automated Nginx Reverse Proxy for Docker
왜 Docker 는 역방향 대 리 를 사용 합 니까?
Docker 용 기 는 무 작위 IP 와 포트 가 할당 되 어 클 라 이언 트 각도 에서 주 소 를 찾 는 것 이 매우 복잡 합 니 다.기본적으로 IP 와 포트 는 호스트 에 만 사용 되 며 호스트 에 연결 되 지 않 는 한 외부 에 접근 할 수 없습니다.
호스트 포트 에 용 기 를 연결 하면 여러 용기 가 같은 호스트 에서 실행 되 는 것 을 방지 할 수 있 습 니 다.예 를 들 어 같은 시간 에 하나의 용기 만 80 포트 에 연결 할 수 있다.이것 또한 새로운 버 전의 용기 가 정지 되 지 않 고 출시 되 는 것 을 복잡 하 게 만 들 었 다. 왜냐하면 오래된 버 전 은 반드시 새로운 버 전이 시작 되 기 전에 먼저 멈 춰 야 하기 때문이다.
역방향 대 리 는 이러한 문 제 를 처리 하 는 데 도움 을 줄 수 있 으 며, 동시에 제로 정지 배치 의 어려움 을 줄 여 가용성 을 높 일 수 있다.
역방향 프 록 시 프로필 생 성
용기 가 시작 되 고 정지 되 었 을 때 역방향 프 록 시 설정 을 설정 하 는 것 은 복잡 할 수 있 습 니 다.일반적인 설정 은 수 동 으로 업데이트 해 야 합 니 다. 오류 가 발생 하기 쉽 고 시간 이 걸 립 니 다.
다행히도 Docker 는 원 격 API 를 제공 합 니 다. inspect containers IP, 포트 및 기타 설정 메타 데 이 터 를 방문 합 니 다.또한 용기 가 언제 시작 되 고 정지 되 는 지 알려 주 는 실시 간 이벤트 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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
첫 번째 Docker for Mac참고 , 나는 옆에 있는 Mac에 Docker를 설치하고 컨테이너를 세워 보고 싶다. Docker Hub를 처음 사용할 때는 계정을 만들어야 합니다. Docker.dmg을 실행하면 Docker가 설치됩니다. Dock...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.