【docker 笔记】dockerize 相关整理

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

文前说明

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

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

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

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 相关整理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

数据结构与算法

数据结构与算法

[美] 乔兹德克 (Drozdek, A. ) / 郑岩、战晓苏 / 清华大学出版社 / 2006-1 / 69.00元

《国外计算机科学经典教材·数据结构与算法:C++版(第3版)》全面系统地介绍了计算机科学教育中的一个重要组成部分——数据结构,并以C++语言实现相关的算法。书中主要强调了数据结构和算法之间的联系,使用面向对象的方法介绍数据结构,其内容包括算法的复杂度分析、链表、栈队列、递归技术、二叉树、图、排序以及散列。《国外计算机科学经典教材·数据结构与算法:C++版(第3版)》还清晰地阐述了同类教材中较少提到......一起来看看 《数据结构与算法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具