• docker容器交付配置管理


    参考 https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file

    Docker容器配置管理

    Set environment variables (-e, --env, --env-file)
    
    $ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
    
    Use the -e, --env, and --env-file flags to set simple (non-array) environment variables in the container you’re running, or overwrite variables that are defined in the Dockerfile of the image you’re running.
    
    You can define the variable and its value when running the container:
    
    $ docker run --env VAR1=value1 --env VAR2=value2 ubuntu env | grep VAR
    
    VAR1=value1
    
    VAR2=value2
    
    You can also use variables that you’ve exported to your local environment:
    
    export VAR1=value1
    
    export VAR2=value2
    
     
    
    $ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
    
    VAR1=value1
    
    VAR2=value2
    
    When running the command, the Docker CLI client checks the value the variable has in your local environment and passes it to the container. If no = is provided and that variable is not exported in your local environment, the variable won’t be set in the container.
    
    You can also load the environment variables from a file. This file should use the syntax <variable>=value (which sets the variable to the given value) or <variable> (which takes the value from the local environment), and # for comments.
    
    $ cat env.list
    
    # This is a comment
    
    VAR1=value1
    
    VAR2=value2
    
    USER
    
     
    
    $ docker run --env-file env.list ubuntu env | grep VAR
    
    VAR1=value1
    
    VAR2=value2
    
    USER=denis

    通过env查看抓取环境变量

    测试案例

    root@playbook-master:~/test# cat Dockerfile

    1 FROM ubuntu:16.04
    2 
    3 RUN apt update && apt install -y python-pip lrzsz
    4 
    5 ADD . /root
    6 
    7 WORKDIR /root
    8 
    9 CMD ["python","env_docker.py"]

    root@playbook-master:~/test# cat redis.conf

    {{var1}}

    {{var2}}

    {{password_redis}}

     

    root@playbook-master:~/test# cat var.txt

    var1=docker

    var2=redis

    password_redis=123456

    __config_location=/root/redis.conf

    root@playbook-master:~/test# docker run --name env1 -d --env-file ./var.txt env:test

    eb6eb002f1d03d783d49fd17b872abf96370323d50f00fafba1fed4e23e91141

    root@playbook-master:~/test# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES

    eb6eb002f1d0        env:test            "python env_docker.py"   2 seconds ago       Up 1 second                             env1

    root@playbook-master:~/test# docker exec -it env1 /bin/bash

    root@eb6eb002f1d0:~# cat redis.conf

    docker

    redis

    123456

    python 处理脚本Env_docker.py

     1 # -*- coding:utf-8 -*-
     2 
     3 #!/usr/bin/python
     4 
     5 import os
     6 
     7 import re
     8 
     9 import time
    10 
    11 def alter(file):
    12 
    13     dict = os.environ
    14 
    15    
    16 
    17     file_data = ""
    18 
    19     with open(file,"r") as f:
    20 
    21         for line in f:
    22 
    23             for key in dict.keys():
    24 
    25                 if key in dict.keys():
    26 
    27                     keya = "{{"+key+"}}"
    28 
    29                     line = line.replace(keya,dict[key])
    30 
    31             file_data += line
    32 
    33     with open(file,"w") as f:
    34 
    35         f.write(file_data)
    36 
    37  
    38 
    39 dict=os.environ
    40 
    41 filenames = dict['__config_location']
    42 
    43 filenames = filenames.split(',')
    44 
    45 for filename in filenames:
    46 
    47     print(filename)
    48 
    49     alter(filename)
    50 
    51 time.sleep(60)  #测试添加入env_docker.py脚本

    shell处理脚本(ubuntu /bin/sh不支持数组功能,要用/bin/bash)

     1 #!/bin/bash
     2 
     3 deal(){
     4 
     5    key=($(env|awk -F= '{print $1}'))
     6 
     7    value=($(env|awk -F= '{print $2}'))
     8 
     9    num=$(env|wc -l)
    10 
    11    for ((i=0;i<$num;i++))
    12 
    13    do
    14 
    15          key1=${key[$i]}
    16 
    17          keya="{{"$key1"}}"
    18 
    19          value1=${value[$i]}
    20 
    21          grep $keya $file >/dev/null
    22 
    23          if [ $? -eq 0 ];
    24 
    25          then
    26 
    27              sed -i "s/$keya/$value1/g" $file
    28 
    29          fi
    30 
    31    done
    32 
    33 }
    34 
    35 for file in `echo ${__config_location}|awk -F, '{for(i=1;i<=NF;i++){print $i;}}'`
    36 
    37 do
    38 
    39    deal
    40 
    41 done
  • 相关阅读:
    iOS 网络优化--页面返回的时候取消网络请求
    iOS 内存管理
    realm数据库使用
    KNN 算法分类电影类型
    sklearn库学习之01
    Python 生成4位验证码图片
    Python——读写Excel文件
    KNN--用于手写数字识别
    Python基础学习-'module' object has no attribute 'urlopen'解决方法
    swift_通知的使用
  • 原文地址:https://www.cnblogs.com/Honeycomb/p/10114433.html
Copyright © 2020-2023  润新知