zoukankan      html  css  js  c++  java
  • 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
    • 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

  • 相关阅读:
    DataTable:数据库到程序的桥梁
    《Javascript高级程序设计》阅读记录(三):第五章 上
    《Javascript高级程序设计》阅读记录(二):第四章
    javascript获取窗口位置、绝对位置、事件位置等
    《Javascript高级程序设计》阅读记录(一):第二、三章
    调试用随笔
    C#值类型和引用类型
    vue使用vue-awesome-swiper及一些问题
    npm与yarn命令对比
    npm与nrm
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12590264.html
Copyright © 2011-2022 走看看