前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单优化容器服务

简单优化容器服务

作者头像
soulteary
发布2023-03-05 17:13:48
7870
发布2023-03-05 17:13:48
举报

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2019年04月27日 统计字数: 2001字 阅读时间: 4分钟阅读 本文链接: https://soulteary.com/2019/04/27/optimizing-container-services.html

简单优化容器服务

去年的时候,曾经写过一篇使用 Docker 、Traefik 以及 Nginx 创建自动索引站点的文章,本篇内容将聊聊如何进行优化。

包含内容:剥离容器配置中的变量、如何对容器进行健康检查、如何限制容器日志尺寸等。

更新的项目代码保存在:GitHub 上,可以自取。

剥离环境变量

前文的 docker-compose.yml 中,许多内容是直接写死在文件中的,随着配置文件越来越“复杂”、同类的服务启动越来越多,我们需要将一些基础的配置剥离出来,以方便后续的维护。

代码语言:javascript
复制
nginx:
    image: nginx:1.15.7-alpine
    labels:
      - "traefik.frontend.rule=Host:demo.soulteary.com"
    extra_hosts:
      - "demo.soulteary.com:127.0.0.1"

比如“域名”、“镜像名称”等信息,我们可以从上面配置文件中进行剥离,剥离后的配置如下:

代码语言:javascript
复制
nginx:
    image: ${NGX_IMAGE}
    labels:
      - "traefik.frontend.rule=Host:${NGX_DOMAIN}"
    extra_hosts:
      - "${NGX_DOMAIN}:127.0.0.1"

为了让 docker-compose.yml 能够像之前一样正常工作,我们需要创建一个 。env 文件,存放刚刚剥离的信息。

代码语言:javascript
复制
NGX_IMAGE=nginx:1.15.8-alpine
NGX_DOMAIN=demo.soulteary.com

后续这类信息多起来之后,可以通过配置系统接口获取,或者让CD系统自动生成。

支持 HTML 文件预览或直接下载

Nginx 默认配置中, HTML 类型文件将会被渲染成我们熟悉的网页,这显然不符合 autoindex 的需求,如果能够像 TEXT 纯文本一样直接在浏览器中进行预览或许会更好。

修改 Nginx 使用的 mime.types 文件,将 HTML 类型文件进行修改,原始文件如:

代码语言:javascript
复制
text/html                                       html htm shtml;

需要修改为:

代码语言:javascript
复制
text/plain                                       html htm shtml;

如果你需要用户在访问页面时,能够直接下载文件,那么可以将 text/plain 修改为 application/octet-stream

容器服务监控检查

为了容器中的应用运行结果更加可靠,我们需要让容器进行健康检查。

因为本例中的内容是动态生成的,虽然程序效率很高,但是还是建议让检查工具请求的内容尽可能更简单一些,为此我们定义一个新的路径 /health-check ,并将它添加到 nginx.conf 配置中:

代码语言:javascript
复制
location = /health-check {
    access_log  off;
    default_type text/html;
    return      200 'alive';
}

当健康检查器或者用户访问这个地址时,将会得到“alive”的结果。

接着,在 docker-compose.yml 中定义检查器:

代码语言:javascript
复制
healthcheck:
  test: ["CMD-SHELL", "wget -q --spider --proxy off localhost/health-check || exit 1"]

当你执行 docker ps 时,终端输出的文本将会有一些不同。

代码语言:javascript
复制
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS                            PORTS                                                                              NAMES
d9903d19aae7        nginx:1.15.8-alpine                        "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds (health: starting)   80/tcp

当程序完全运行之后, Up4seconds(health:starting) 将会变更为 Up10seconds(healthy)

未来在调试/查看容器服务状况时,辨别服务运行状态就又有了一个新的依据啦。

约束日志文件尺寸

搭建在公网上的应用,除了会被用户访问之外,还可能遭到扫描器问候、恶意攻击的海量请求。

这时,如果不约束日志文件尺寸,很容易将磁盘占满,造成其他麻烦。

除了使用 logrotate 处理日志外,更简单的方案是在 docker-compose.yml 中对日志尺寸进行限制,将下面的内容添加到配置文件中。

代码语言:javascript
复制
logging:
    driver: "json-file"
    options:
        max-size: "10m"
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 折腾技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单优化容器服务
    • 剥离环境变量
      • 支持 HTML 文件预览或直接下载
        • 容器服务监控检查
          • 约束日志文件尺寸
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档