bashible 是一个很不错的基于bash 的dsl 框架,类似ansible,但是简单使用也比较灵活,以下是集成docker 的使用
以下是一个集成openresty 的demo
集成bashible 的openresty 镜像
目的很简单,就是集成bashible到openresty 镜像中,方便测试以及生成配置,然后我们可以通过
docker 的multi stage 进行配置copy减少镜像的大小
- Dockerfile
FROM openresty/openresty:1.15.8.3-stretch
RUN apt update && apt-get install -y wget net-tools
RUN wget https://raw.githubusercontent.com/mig1984/bashible/master/bashible
RUN wget https://raw.githubusercontent.com/mig1984/bashible/master/bashible.edit.bash
RUN wget https://raw.githubusercontent.com/mig1984/bashible/master/bashible.net.bash
RUN wget https://raw.githubusercontent.com/mig1984/bashible/master/bashible.template.bash
RUN wget https://raw.githubusercontent.com/mig1984/bashible/master/bashible.timeout.bash
RUN chmod 755 bashible && chmod 755 bashible.edit.bash && chmod 755 bashible.net.bash && chmod 755 bashible.template.bash && chmod 755 bashible.timeout.bash
RUN mv bashible /usr/local/bin && mv bashible.edit.bash /usr/local/bin && mv bashible.net.bash /usr/local/bin && mv bashible.template.bash /usr/local/bin && mv bashible.timeout.bash /usr/local/bin
CMD ["sh", "-c", "cd /opt/content/ && bashible t.bash && /usr/bin/openresty -g 'daemon off;'"]
- 简单说明
这个镜像约定bashible的配置都在/opt/content 中
简单使用
- 项目结构
├── Dockerfile
├── Dockerfile-multi
├── README.md
├── content
│ ├── index.html.tpl
│ ├── js
│ │ ├── bar.js
│ │ └── foo.js
│ ├── parts
│ │ ├── body.tpl
│ │ └── head.tpl
│ └── t.bash
└── docker-compose.yaml
- 说明
content 中为基于bashible 的nginx index.html 生成,使用了bashible 提供的模板技术
t.bash:
use template
# set some variables for the template
FOO_OR_BAR=bar
@ Creating index page for home
- output_to /usr/local/openresty/nginx/html/index.html template index.html.tpl
index.html.tpl:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>bashible</title>
$( template parts/head.tpl )
</head>
<body>
$( template parts/body.tpl )
</body>
</html>
head.tpl index 的头部,使用了cat 引入content
<script type='text/javascript'>
$( cat js/$FOO_OR_BAR.js )
</script>
body.tpl 使用了系统函数date
<div style="text-align:center">
<h1> Now is $( date ) </h1>
</div>
- 多阶段集成使用
FROM dalongrong/openresty:bashible as build
WORKDIR /opt
COPY content/ /opt/content
RUN cd /opt/content/ && bashible t.bash
FROM openresty/openresty:alpine
COPY --from=build /usr/local/openresty/nginx/html/index.html /usr/local/openresty/nginx/html/index.html
- docker-compose 文件
version: "3"
services:
web:
build:
context: .
dockerfile: Dockerfile-multi
volumes:
- "./content/:/opt/content/"
ports:
- "80:80"
说明
使用bashible 作为一个配置管理工具简洁、高效,同时集成在容器中也是一个很不错的选择
参考资料
https://hub.docker.com/repository/docker/dalongrong/openresty
https://hub.docker.com/repository/docker/dalongrong/bashible
https://github.com/mig1984/bashible