【问题标题】:Separate Dockerrun.aws.json files for staging and production单独的 Dockerrun.aws.json 文件用于暂存和生产
【发布时间】:2018-10-14 04:44:05
【问题描述】:

为 Dockerrun.aws.json 文件处理部署到登台和生产的最佳方式是什么?有没有办法将变量传递给图像值等,或者每个环境都有多个 Dockerrun.aws.json 文件?目前,我的登台环境将图像标记为登台,生产将图像标记为生产,但我需要每个环境不同的 Dockerrun.aws.json 吗?我要么想做类似的事情:

"image": "${IMAGE}",

其中 IMAGE 在每个环境的配置中定义或将每个文件分开。所以我可以根据分段或生产对每个容器进行不同的设置。

【问题讨论】:

  • 你能找到办法吗?

标签: amazon-web-services amazon-elastic-beanstalk dockerrun.aws.json


【解决方案1】:

一种方法可能是拥有一个 Makefile 并具有用于在不同环境中部署的单独命令,例如“make deploy-staging”或“make deploy-prod”。在内部,该命令将通过将特定于 env 的值插入到模板 Dockerrun.aws 文件中动态生成 Dockerrun.aws.json。

【讨论】:

    【解决方案2】:

    老问题,但如果它可以帮助其他人,我想做几乎相同的事情并自动化它,所以作为一种快速的方法,我想出了一个简单的 shell 脚本。

    我们的想法是拥有一个 Dockerrun.aws.json 模板文件,该文件将包含动态 ENV 属性,然后根据所需的环境,脚本将使用此模板并生成适当的 Dockerrun.aws.json 文件。

    示例:

    创建一个包含以下内容的 shell 脚本:

    #!/bin/bash
    
    # current script directory path
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    
    # $1 will be the environement name passed to the script : it can only be dev or prod
    # if empty, we ask for user input for convenience
    if [ "$1" == "" ]; then
      echo -n "Enter your the environment (either 'dev' or 'prod') and press [ENTER]:"
      read ENV
    else
      ENV=$1
    fi
    
    # check if environment name is valid
    if [ "$ENV" == "dev" ] || [ "$ENV" == "prod" ] ; then
    
      # move to shell script directory
      cd $DIR
    
      # generate Dockerfile from template by replacing the ENV property by the input
      echo "Generating Dockerrun.aws.json..."
      sed -e "s/\${ENV}/$ENV/g" Dockerrun.aws.json.template > Dockerrun.aws.json
    
      # do other things here if necessary
    
    else
      echo "$ENV is not a valid environment name, accepted values : env & prod"
      exit 0
    fi
    

    然后创建您的 Dockerrun.aws.json.template 文件:

    {
      "AWSEBDockerrunVersion": 2,
      "containerDefinitions": [
        {
          "name": "php-app",
          "image": "phpfpm-image-${ENV}",
          #...
        },
        {
          "name": "nginx-proxy",
          "image": "nginx-image-${ENV}",
          #...
        }
      ]
    }
    

    现在,只需将 shell 脚本放在 Dockerrun.aws.jon.template 文件所在的位置,然后像这样运行它:

    sh yourscript.sh dev
    

    它将生成一个有效文件供您用于给定环境。

    这是一个简单的示例,让您对做什么有一个基本的了解,然后您可以从中构建更复杂的东西。我个人使用它来挑选所有正确的配置文件(.ebextensions 等),然后压缩整个文件以上传到 beanstalk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2015-01-29
      • 2016-09-14
      • 2019-05-16
      • 2019-01-09
      • 2019-04-26
      • 2023-03-17
      相关资源
      最近更新 更多