前面有说过关于使用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 "$@"
  • 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

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

  1. 使用mustache 做为docker容器运行动态配置工具

    很多时候我们需要在启动容器的时候基于配置文件运行,如果在配置比较简单的时候我们可以通过环境变量 注入,同时当前12 factors 越来越融入大家的开发中了(对于配置通过环境变量处理),但是好多老的软 ...

  2. 如何在Linux上创建,列出和删除Docker容器

    本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...

  3. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  4. 利用docker容器运行.net core webapi

    利用docker容器运行.net core webapi :first-child { margin-top: 0 !important; } > :last-child { margin-bo ...

  5. Linux高级运维 第八章 部署docker容器虚拟化平台

    8.1  Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...

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

    进入终端,sudo -i,切换root,输入docker -d 打开另一个终端,切换root,输入docker search ubuntu,大概如下结果: NAME                   ...

  7. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  8. Linux下将.Asp Core 部署到 Docker容器中

    我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...

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

    0.环境说明 Ubuntu 16.04 docker 1.35 1.Docker的“可视化” Docker本身的工作模式是命令行的,因为主要的使用场景可能是做服务器后端方面的比较多. 但有时候我们会有 ...

随机推荐

  1. 【leetcode-22】括号生成

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()())& ...

  2. SpringCloud分布式架构权限管理

    概述 本文讨论分布式架构权限管理的两种情况,一种是针对统一授权访问的,一种是跨平台接口访问的. 虽然分布式架构会做业务的切割,将整体的业务切割为独立的子业务或者子平台,但是同一平台下往往会有统一的授权 ...

  3. 接口XMPPConnection

    接口XMPPConnection 所有已知的实现类: AbstractXMPPConnection,XMPPBOSHConnection,XMPPTCPConnection 公共接口XMPPConne ...

  4. Python基础8

    jupyter notebook 安装目录插件, 步骤

  5. java手写多级缓存

    多级缓存实现类,时间有限,该类未抽取接口,目前只支持两级缓存:JVM缓存(实现 请查看上一篇:java 手写JVM高性能缓存).redis缓存(在spring 的 redisTemplate 基础实现 ...

  6. java 之 集合概述

    一.集合概述 不管是哪一种数据结构,其实本质上都是容器来着,就是用来装对象的.因此,我们就要搞清楚两点:(1)如何存储(2)存储特点 1.集合 集合是 Java 中提供的一种容器,可以用来存储多个数据 ...

  7. ObjC: 源文件的组织

    转自:http://marshal.easymorse.com/tech/objc-%e6%ba%90%e6%96%87%e4%bb%b6%e7%9a%84%e7%bb%84%e7%bb%87 最简单 ...

  8. CTFd平台搭建以及一些相关问题解决

    CTFd平台搭建以及一些相关问题解决 一.序言 因为想给学校工作室提高一下学习氛围,随便带学弟学妹入门,所以做了一个ctf平台,开源的平台有CTFd和FBCTF,因为学生租不起高端云主机所以只能选择占 ...

  9. rpm安装与yum安装的区别

      linux下的安装包多为rpm安装包.通常安装方法为 rpm -ivh 包的路径+包名.rpm 其中参数-i为安装 -v显示信息 -h显示进度条.这三个参数基本捆绑使用rpm的路径不单可以是本地磁 ...

  10. ML- 核函数(Kernel) 的 SVM

    Why 核函数 目的是为了解决线性不可分问题. 核心思想是升维. 当样本点在低维空间不能很好地分开的时候, 可以考虑将样本通过某种映射(就是左乘一个矩阵) 到高维空间中, 然后在高维空间就容易求解一个 ...