微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐