国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker 自動(dòng)化 Nginx 反向代理

shiina / 2630人閱讀

摘要:一個(gè)反向代理可以幫助處理這些問(wèn)題,同時(shí)通過(guò)減輕零停機(jī)部署的困難來(lái)提升可用性。生成反向代理配置文件當(dāng)一個(gè)容器被啟動(dòng)和停止的時(shí)候,設(shè)置一個(gè)反向代理配置可能是復(fù)雜的。這些可以被用于自動(dòng)地生成一個(gè)反向代理配置。

自動(dòng)化 Nginx 反向代理 Docker

標(biāo)簽(空格分隔): Docker Nginx Automated


  

本文作者是 jwilder,原文地址是 Automated Nginx Reverse Proxy for Docker

為什么 Docker 要使用反向代理

Docker 容器被分配隨機(jī) IP 和端口,這使得從客戶端角度來(lái)尋址它們是非常復(fù)雜的。默認(rèn),IP 和端口是專用于主機(jī)的,并且不能被外部訪問(wèn)除非它們被綁定到主機(jī)上。

綁定容器到主機(jī)端口可以防止多個(gè)容器在同一個(gè)主機(jī)上運(yùn)行。比如,在同一時(shí)間僅僅只有一個(gè)容器可以被綁定到 80 端口。這也使得新版本的容器無(wú)停機(jī)的推出復(fù)雜化了,因?yàn)槔习姹颈仨氃谛掳姹締?dòng)之前先停止。

一個(gè)反向代理可以幫助處理這些問(wèn)題,同時(shí)通過(guò)減輕零停機(jī)部署的困難來(lái)提升可用性。

生成反向代理配置文件

當(dāng)一個(gè)容器被啟動(dòng)和停止的時(shí)候,設(shè)置一個(gè)反向代理配置可能是復(fù)雜的。通常的配置需要手動(dòng)更新,這容易出錯(cuò)并且費(fèi)時(shí)。

幸運(yùn)的是,Docker 提供了一個(gè)遠(yuǎn)程 API 來(lái) inspect containers 和訪問(wèn)他們的 IP,端口和其他配置元數(shù)據(jù)。另外,它也提供一個(gè)實(shí)時(shí)事件 API可以被用于通知什么時(shí)候容器被啟動(dòng)和停止。這些 API 可以被用于自動(dòng)地生成一個(gè)反向代理配置。

docker-gen 是一個(gè)使用這些 API 的小工具,并導(dǎo)出容器的元數(shù)據(jù)到模板中。模板被渲染以及一個(gè)可選的通知命令可以被運(yùn)行來(lái)重起服務(wù)。

使用 docker-gen,我們可以自動(dòng)的生成 Nginx 的配置并重載 Nginx當(dāng)它們改變的時(shí)候。同樣的方法可被用于 Docker 日志管理。

Nginx 反向代理 Docker

這個(gè)例子 Nginx 模板可以被用于生成一個(gè) Docker 容器使用虛擬主機(jī)路由的反向代理配置文件。這個(gè)模板是使用 golang text/template package 實(shí)現(xiàn)的。它使用一個(gè)通用的 groupBy 模板函數(shù)通過(guò)它們的 VIRTUAL_HOST 環(huán)境變量來(lái)分組運(yùn)行的容器。這簡(jiǎn)化了遍歷容器來(lái)生成一個(gè)負(fù)載均衡后端以及使得零停機(jī)部署可行。

{{ 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 }}

這個(gè)模板可以使用 docker-gen 來(lái)運(yùn)行:

docker-gen -only-exposed -watch -notify "/etc/init.d/nginx reload" templates/nginx.tmpl /etc/nginx/sites-enabled/default

-only-exposed - 僅僅使用容器已經(jīng)暴露的端口。

-watch - 啟動(dòng)之后,監(jiān)控 docker 容器事件和重新生成模板。

-notify "/etc/init.d/nginx reload" - 在模板生成后重載 nginx 配置。

templates/nginx.tmpl - nginx 模板。

/etc/nginx/sites-enabled/default - 目標(biāo)文件。

這是兩個(gè)容器配置了 VIRTUAL_HOST=demo1.localhostVIRTUAL_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;
    }
}
試驗(yàn)

我使用這個(gè)設(shè)置創(chuàng)建了一個(gè)可信任的構(gòu)建來(lái)使得它非常容易試驗(yàn)。

運(yùn)行 nginx-proxy 容器:

$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock -t jwilder/nginx-proxy

使用一個(gè) VIRTUAL_HOST 環(huán)境變量啟動(dòng)你的容器:

docker run -e VIRTUAL_HOST=foo.bar.com -t ...
總結(jié)

為 docker 容器生成 nginx 反向代理配置可以通過(guò)使用 Docker APIs 和一些基礎(chǔ)的模板自動(dòng)化,這可以簡(jiǎn)化部署同時(shí)提升可用性。

雖然這非常適用于單臺(tái)主機(jī)上運(yùn)行的容器,為遠(yuǎn)程主機(jī)生成配置需要自動(dòng)發(fā)現(xiàn)??匆幌?Docker 自動(dòng)發(fā)現(xiàn) 對(duì)這個(gè)問(wèn)題的解決。

更新:這有一些類(lèi)似觀點(diǎn)和變種的其他文章值得一看:

Using Nginx, Confd, and Docker for Zero-Downtime Web Update - Brian Ketelsen

Docker Events - Michael Crosby

Haproxy As A Static Reverse Proxy for Docker Containers - Oskar Hane

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/39087.html

相關(guān)文章

  • Docker 動(dòng)化 Nginx 反向代理

    摘要:一個(gè)反向代理可以幫助處理這些問(wèn)題,同時(shí)通過(guò)減輕零停機(jī)部署的困難來(lái)提升可用性。生成反向代理配置文件當(dāng)一個(gè)容器被啟動(dòng)和停止的時(shí)候,設(shè)置一個(gè)反向代理配置可能是復(fù)雜的。這些可以被用于自動(dòng)地生成一個(gè)反向代理配置。 自動(dòng)化 Nginx 反向代理 Docker 標(biāo)簽(空格分隔): Docker Nginx Automated 本文作者是 jwilder,原文地址是 Automated N...

    codergarden 評(píng)論0 收藏0
  • Docker 快速安裝&搭建 Ngnix 環(huán)境,并配置反向代理

    摘要:一下載鏡像我這里用的是輕量級(jí)的鏡像下載完成后,通過(guò)命令檢查一下鏡像是否下載成功二先以簡(jiǎn)單的方式運(yùn)行鏡像以后臺(tái)方式運(yùn)行鏡像指定容器的名稱為命令執(zhí)行完成后,通過(guò)命令確認(rèn)一下容器是否啟動(dòng)成功。 歡迎關(guān)注個(gè)人微信公眾號(hào): 小哈學(xué)Java, 文末分享阿里 P8 高級(jí)架構(gòu)師吐血總結(jié)的 《Java 核心知識(shí)整理&面試.pdf》資源鏈接??!個(gè)人網(wǎng)站: https://www.exception.sit...

    鄒強(qiáng) 評(píng)論0 收藏0
  • Docker 快速安裝&搭建 Ngnix 環(huán)境,并配置反向代理

    摘要:一下載鏡像我這里用的是輕量級(jí)的鏡像下載完成后,通過(guò)命令檢查一下鏡像是否下載成功二先以簡(jiǎn)單的方式運(yùn)行鏡像以后臺(tái)方式運(yùn)行鏡像指定容器的名稱為命令執(zhí)行完成后,通過(guò)命令確認(rèn)一下容器是否啟動(dòng)成功。 歡迎關(guān)注個(gè)人微信公眾號(hào): 小哈學(xué)Java, 文末分享阿里 P8 高級(jí)架構(gòu)師吐血總結(jié)的 《Java 核心知識(shí)整理&面試.pdf》資源鏈接!!個(gè)人網(wǎng)站: https://www.exception.sit...

    xiaoqibTn 評(píng)論0 收藏0
  • Angular 容器部署

    摘要:很多人反應(yīng)很難訪問(wèn),所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過(guò)程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問(wèn) Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過(guò)程,其中包括 Docke...

    tracy 評(píng)論0 收藏0
  • Angular 容器部署

    摘要:很多人反應(yīng)很難訪問(wèn),所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過(guò)程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問(wèn) Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過(guò)程,其中包括 Docke...

    alighters 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<