【docker 笔记】dockerize 相关整理

栏目: 编程工具 · 发布时间: 6年前

文前说明

作为 码农 中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。

不用于商业目的,转载请注明出处。

1. 概述

  • dockerize 是一个小型的 Golang 应用,是一个实用程序,用于简化在 Docker 容器中运行的应用程序,可以简化以下容器管理的过程。
    • 在启动时使用模板生成配置文件和容器环境变量。
    • 跟踪任意的日志文件到 STDOUT 和 STDERR。
    • 在启动主进程之前,等待(探测 )使用 TCP、HTTP、Unix 的其他服务可用。
  • dockerize 的典型用例是,当有一个应用程序具有一个或多个配置文件,并且希望使用环境变量控制某些值时。

用例 1

  • 使用 SQLAlchemyPython 应用程序可能无法直接使用环境变量,可能需要从一个 Python 配置文件中读取数据库 URL,一个名为 SQLALCHEMY_DATABASE_URI 的变量。
  • dockerize 允许设置一个环境变量,如数据库 URL,并在容器启动时更新这个 Python 配置文件。
  • dockerize 还可以延迟 Python 应用程序的启动,直到数据库容器正在运行并侦听 TCP 端口。

用例 2

  • 当应用程序的日志是文件系统上的特定文件时,而不是 STDOUT 或 STDERR,这使得使用 docker logs 命令对容器进行故障排除变得困难。例如,默认 nginx 在 /var/log/nginx 目录下记录两个不同的日志文件(access.log 和 error.log)。
  • dockerize 允许指定应该跟踪哪些日志文件以及应该将它们发送到哪里。
  • dockerize 的工作原理是使用 ENTRYPOINT 或 CMD 指令包装对应用程序的调用。
CMD dockerize -template /etc/nginx/nginx.tmpl:/etc/nginx/nginx.conf -stdout /var/log/nginx/access.log -stderr /var/log/nginx/error.log -wait tcp://web:8000 nginx

2. 命令行选项

  • 可以通过多次使用 -template 指定多个模板。
    • 格式: -template <src>:<dest>
[root@localhost ~]# dockerize -template template1.tmpl:file1.cfg -template template2.tmpl:file3
  • 模板可以通过不指定 dest 生成到 STDOUT。
[root@localhost ~]# dockerize -template template1.tmpl
  • 模板也可以是目录。这种情况下,此目录中的所有文件都作为模板处理,并以相同的名称存储在目标目录中。如果省略目标目录,则将输出发送到 STDOUT。源目录中的文件按 排序 顺序处理(由 ioutil.readdir 返回)。
[root@localhost ~]# dockerize -template src_dir:dest_dir
  • 如果目标文件已经存在,dockerize 默认将覆盖它。 -no-overwrite 标志不进行覆盖。
[root@localhost ~]# dockerize -no-overwrite -template template1.tmpl:file
  • 通过多次传递选项,可以跟踪多个文件到 STDOUT 和 STDERR。
[root@localhost ~]# dockerize -stdout info.log -stdout perf.log
  • 如果 inotify 在容器中不起作用,则可以使用 -poll 来轮询文件更改。
[root@localhost ~]# dockerize -stdout info.log -stdout perf.log -poll
  • 如果文件使用 {{}} 作为其语法的一部分,则可以使用 -delims 更改模板转义字符。
[root@localhost ~]# dockerize -delims "<%:%>"
  • 可以为 HTTP/HTTPS 协议指定 HTTP 头。
[root@localhost ~]# dockerize -wait http://web:80 -wait-http-header "Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

2.1 等待其他依赖项

  • 使用 docker compose 等 工具 依赖其他链接容器中的服务是很常见的,但是通常依赖链接是不够的,虽然容器本身可能已经启动,但其中的服务可能还没有准备好。
  • dockerize 能够在启动应用程序之前在指定协议(FILE、TCP、TCP4、TCP6、HTTP、HTTPS 和 Unix)上等待服务。
[root@localhost ~]# dockerize -wait tcp://db:5432 -wait http://web:80 -wait file:///tmp/generated-file
  • 可以使用 -timeout 参数(默认值 10 秒)指定等待服务可用的时间。如果超时,并且服务仍然不可用,则进程退出,状态代码为 1。
[root@localhost ~]# dockerize -wait tcp://db:5432 -wait http://web:80 -timeout 10s

2.2 模板的使用

  • 模板使用 Golang 文本/模板。可以使用 .Env 访问模板中的环境变量。
{{ .Env.PATH }} is my path
  • 一些内置功能。
内置功能 说明 用例
default $var $default 一个值不存在时返回默认值。 {{ default .Env.VERSION "0.1.2" }}
contains $map $key 如果一个字符串在另一个字符串中,则返回 true。
exists $path 确定文件路径是否存在。 {{ exists "/etc/default/myapp" }}
split $string $sep 使用分隔符字符串将字符串拆分为数组。 {{ split .Env.PATH ":" }}
replace $string $old $new $count 替换另一个字符串中出现的所有字符串。 {{ replace .Env.PATH ":" }}
parseUrl $url 将 URL 解析为 protocol, scheme, host, etc. 等部分。
atoi $value 将字符串 $value 解析为 int。 {{ if (gt (atoi .Env.NUM_THREADS) 1) }}
add $arg1 $arg 执行整数加法。 {{ add (atoi .Env.SHARD_NUM) -1 }}
isTrue $value 将字符串$value解析为布尔值。 {{ if isTrue .Env.ENABLED }}
lower $value 小写字符串。
upper $value 大写字符串。
jsonQuery $json $query 返回针对 JSON 文档的选择查询的结果。
loop 创建一个循环。

jsonQuery

  • 对象和字段按名称访问。
  • 数组元素由方括号中的索引访问(例如 [1] )。
  • 嵌套元素由点(.)分隔。
  • JSON 格式的 .Env.SERVICES 变量。
{
  "services": [
    {
      "name": "service1",
      "port": 8000,
    },{
      "name": "service2",
      "port": 9000,
    }
  ]
}
  • 模板表达式 jsonQuery .Env.SERVICES "services.[1].port" 返回 9000。

loop

  • 循环允许在模板中创建 for 循环。需要 1 到 3 个参数。
# Loop from 0...10
{{ range loop 10 }}
i = {{ . }}
{{ end }}

# Loop from 5...10
{{ range $i := loop 5 10 }}
i = {{ $i }}
{{ end }}

# Loop from 5...10 by 2
{{ range $i := loop 5 10 2 }}
i = {{ $i }}
{{ end }}

以上所述就是小编给大家介绍的《【docker 笔记】dockerize 相关整理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Elements of Statistical Learning

The Elements of Statistical Learning

Trevor Hastie、Robert Tibshirani、Jerome Friedman / Springer / 2009-10-1 / GBP 62.99

During the past decade there has been an explosion in computation and information technology. With it have come vast amounts of data in a variety of fields such as medicine, biology, finance, and mark......一起来看看 《The Elements of Statistical Learning》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具