linux mustache bash 实现mo 做为docker容器运行动态配置工具数组的处理

前面有说过关于使用mo 工具的简单配置使用,但是实际中我们可能存在比较复杂的数据处理,比如数组,mo
可以进行数组的处理,但是在测试的过程中,一直失败,查看了官方的demo以及帮助命令发现可以通过参数
-s 引入变量文件,可以方便的注入到模版引擎中,所以通过重定向环境变量到文件,然后注入,之后删除即可

环境准备

  • docker-compose.yaml
    此处引入了三个环境变量content DATA DATA2
version: "3"
services: 
  app:
    build: ./
    ports: 
    - "8080:80"
    environment: 
    - "content=dalong demo web page"
    - "DATA=(apple orange pear demo app rong)"
    - "DATA2=(rongfeng orange pear demo app rong)"
  • Dockerfile
FROM nginx:alpine
RUN apk add --no-cache wget bash && \
# install mustache as script
    wget -O /usr/bin/mo https://git.io/get-mo && \
    chmod a+x /usr/bin/mo && \
    apk del wget && \
    mkdir -p /app
COPY index.html.template /app/
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]

entrypoint.sh:
重定向环境变量到文件,然后注入模版引擎,之后参数

#!/bin/sh 
set -ex;
bash -c "/usr/bin/env >/app/myenv";
mo -s=/app/myenv /app/index.html.template > /usr/share/nginx/html/index.html;
rm -rf /app/myenv;
exec "[email protected]"
  • index.html.template 模版文件
    实际上就是一个简单的静态页面通过模版引擎绑定环境变量的数组数据到页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Mustache for docker config demo</title>
    <style>
        .applogo {
            margin: 0 auto;
            width: 400px;
            height: 300px;
            background-color: azure;
        }
    </style>
</head>
<body>
    <div class="applogo">
        <h1>{{content}}</h1>
        <div class="items">
            Things in DATA:
            <br>
            {{#DATA2}}
            Item: {{.}} <br>
            {{/DATA2}}
        </div>
    </div>
</body>
</html>

启动&&测试

  • 启动
docker-compose up -d
  • 效果

说明

以上是一个简单的绑定数组环境变量,实际可能有更好的方法,还是得多看官方文档

参考资料

https://github.com/tests-always-included/mo
https://github.com/rongfengliang/mustache-for-docker-conf-docker-compose

原文地址:https://www.cnblogs.com/rongfengliang/p/11317683.html

时间: 2024-11-03 14:40:25

linux mustache bash 实现mo 做为docker容器运行动态配置工具数组的处理的相关文章

Docker容器运行ASP.NET Core

原文:Docker容器运行ASP.NET Core 最近要学习的知识太多,都不知道先学哪些了,原本计划这篇博客是写xamarin.forms中的listview用法,关于listview的用法简书上有一篇介绍的也比较详细,所以暂时先缓一缓,属于次要任务,等以后再写.本周在万能的淘宝找了写关于区块链的教程,同时了解了下.net core.最近一两年对C#技术跟进不多,侧重点是Java,之前出.net core1.0的时候觉得.net core还不完善,所以就没学,没想到.net core这么快已经

Docker容器运行GUI程序的配置方法

0.环境说明 Ubuntu 16.04 docker 1.35 1.Docker的"可视化" Docker本身的工作模式是命令行的,因为主要的使用场景可能是做服务器后端方面的比较多. 但有时候我们会有在docker容器里运行一些图形界面的软件,或者要调用摄像头,输出图像等等一些需求,这个时候需要解决这个Docker "可视化"的问题. (这里的"可视化"不是很容易搜到的可视化管理的方法) 2.解决方案1-启动容器时添加配置选项 林帆:Docker

Docker容器硬盘动态扩容

扩容容器 docker容器默认的空间是10G,如果想指定默认容器的大小(在启动容器的时候指定),可以在docker配置文件里通过dm.basesize参数指定,比如 1 docker -d --storage-opt dm.basesize=20G 是指定默认的大小为20G,具体参数可以参考https://github.com/docker/docker/tree/master/daemon/graphdriver/devmapper 上面方法只是真的生成容器的时候进行的,并且修改后需要重启do

docker容器运行后退出,怎么才能一直运行?【转】

现象 启动docker容器 docker run –name [CONTAINER_NAME] [CONTAINER_ID] 查看容器运行状态 docker ps -a 发现刚刚启动的mydocker容器已经退出 原因 docker容器的主线程(dockfile中CMD执行的命令)结束,容器会退出 办法 可以使用交互式启动 docker run -i [CONTAINER_NAME or CONTAINER_ID] 上面的不太友好,建议使用后台模式和tty选项 docker run -dit [

【原创】大叔经验分享(71)docker容器中使用jvm工具

java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只有jdk版本才有jvm工具,所以可以直接使用jdk版本的openjdk: 比如常用的tomcat镜像则没有jdk和jre选择,默认使用都是jre,所以没有jvm工具,tomcat镜像中的jdk目录如下: # ls /usr/lib/jvm/java-1.8-openjdk bin jre lib #

docker 容器 syslog日志配置 对日志进行拆分目录和文件

syslog配置(centos系统,一般系统都有默认安装): vi /etc/rsyslog.conf 去掉前面注释 日志配置: vi /etc/rsyslog.d/docker.conf (一般默认配置会加载/etc/rsyslog.d/目录下所有.conf配置文件,在/etc/rsyslog.d/docker.conf下可以找到路径) # 定义日志模版$template web,"/var/log/docker/%programname%/%timereported:0:10:date-rf

Linux主机如何用ssh去登录docker容器的步骤

主机:XUbuntu 15.04 + docker 进入终端,sudo -i,切换root,输入docker -d 打开另一个终端,切换root,输入docker search ubuntu,大概如下结果: NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDubuntu                         Ubuntu

docker学习-docker容器运行

docker run是启动容器的方法,可以用三种指定的方式指定容器启动时执行的命令.(1)CMD指令(2)ENTRYPOINT指令(3)在docker run中命令行中指定但是docker run并不能长期保持running状态,我们经常需要进入到容器中去做一些工作,比如查看日志.调试.启动其他进程等.有两种进入容器的方式:attach和exec. docker attach 首先启动一个容器,保持后台长期运行 docker run -d ubuntu /bin/bash -c "while t

docker容器轻量级web管理工具之portainer

portainer部署&监控工具 官方地址:https://github.com/portainer/portainer 部署方法:https://portainer.readthedocs.io/en/latest/deployment.html 方法1.基于本地容器的部署[推荐] 以192.168.2.29这台主机为例. 首先需要开启docker的2375端口 vi /etc/sysconfig/docker  添加上 centos6下使用 other_args='-Htcp://0.0.0