Aug*_*ger 8 nginx docker docker-compose docker-networking
所以我有:
version: "3.6"
services:
nginx:
image: nginx
app:
image: node:latest
Run Code Online (Sandbox Code Playgroud)
我的 nginx 配置是:
upstream project_app {
server app:4000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://project_app;
}
Run Code Online (Sandbox Code Playgroud)
为了在不停机的情况下更新容器(滚动更新),我首先将app服务升级到 2:
docker-compose up -d --no-deps --scale app=2 --no-recreate app
Run Code Online (Sandbox Code Playgroud)
它将project_app_1沿着project_app.
但是在这一步,即使新project_app_1容器准备好了,所有的流量也会流向project_app,前一个容器。
要同时使用它们,我需要运行docker-compose restart nginx.
现在,流量是到project_app和 的路由器project_app_1,这真的很酷。
我现在准备杀死现在已经project_app过时的。
我的问题是:
project_app_1或者它有点自动?http://app:4000是因为 DNS 主机名配置,对吗?在哪里可以了解更多信息?谢谢
PS:如果你对我使用的整个脚本感到好奇,我在相关的github问题上报告了它。
所以我终于找到了更多这方面的信息。
当写入 时server app:4000;,app 是一个 DNS 条目,解析为多个实例。
无需重新启动 nginx 即可更新这些 DNS 条目。详细信息在这里:https://serverfault.com/a/916786/182596
这篇reddit 帖子和nnginx 这篇文章也有帮助。
基本上,必须将 nginx 配置设置为
dockerDNS 服务器127.0.0.11resolver 127.0.0.11 valid=10s;
server {
set $app app:4000;
location / {
proxy_pass http://$app;
}
}
Run Code Online (Sandbox Code Playgroud)
一旦docker-compose up -d --no-deps --scale app=2 --no-recreate app被调用,它就会开始路由到两个实例。
问题是,当缩小规模时,需要 DNS 条目 TTL 来更新它不再有效,因此,对于 ,10s我确实有 50% 的流量下降[0-10s],这还不错,但并不完美。
我目前正在调查:
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |