bashible docker集成使用

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
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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...