Настройка Dockerrun. aws. json в среде Elasti c Beanstalk для многоконтейнерных конфигураций - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь развернуть свое приложение на elasti c beanstalk. В настоящее время все работает локально, и это работает даже с beanstalk elasti c, но проблема в том, что существует только один контейнер docker, явно определенный и показанный как работающий в ECS. Я не уверен, как эффективно идентифицировать тег «изображение» для каждого контейнера. Код развертывается с помощью CodePipeline. Я не очень хорошо знаком с AWS и испытываю значительные трудности при расширении контейнера, чтобы показать, что каждый из контейнеров, указанных в docker -compose-prod.yaml, работает отдельно. Меня беспокоит масштабирование в текущей конфигурации, так как я понимаю, что если программа масштабируется из-за увеличения нагрузки, все контейнеры увеличиваются, даже если они не обязательно нужны. Как правильно определить файл Dockerrun. aws. json и, возможно, файл buildspe c .yml?

Dockerrun. aws. json .template:

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "web",
      "image": "$REPOSITORY_URI:$IMAGE_TAG",
      "essential": true,
      "memory": 500,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ]
    }
  ]
}

Docker -compose-prod.yaml:

version: '3.7'

services:
  web:
    build: ./app
    command: gunicorn appname.wsgi:application --bind 0.0.0.0:1339
    entrypoint: ./entrypoint-prod.sh
    volumes:
      - ./app/:/usr/src/app/
      - static_volume:/usr/src/app/static
      - media_volume:/usr/src/app/media
    expose:
      - 1339
    env_file:
      - ./.env.prod
    depends_on:
      - redis
  nginx:
    build: ./app/nginx
    volumes:
      - static_volume:/usr/src/app/static
      - media_volume:/usr/src/app/media
    ports:
      - 8085:80
    depends_on:
      - web
  redis:
    image: redis:alpine
  celery:
      build: ./app
      command: celery -A appname worker -l info
      volumes:
        - ./app/:/usr/src/app/
      env_file:
        - ./.env.dev
      depends_on:
        - redis
  celery-beat:
    build: ./app
    command: celery -A appname beat -l info
    volumes:
      - ./app/:/usr/src/app/
    env_file:
      - ./.env.dev
    depends_on:
      - redis
volumes:
  static_volume:
  media_volume:

buildspe c .yml

version: 0.2

phases:
  pre_build:
    commands:
    - echo Logging in to Amazon ECR....
    - aws --version
    - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
    - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
    - REPOSITORY_URI=number.dkr.ecr.us-east-1.amazonaws.com/appname-production
    - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
    - echo Build started on `date`
    - echo Building the Docker image....
    - cd app
    - docker pull $REPOSITORY_URI:latest
    - docker build -t $REPOSITORY_URI:latest .
    - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
    - docker push $REPOSITORY_URI:latest
    - docker push $REPOSITORY_URI:$IMAGE_TAG
    - cd ..
    - envsubst < "Dockerrun.aws.json.template" > "Dockerrun.aws.json"
artifacts:
  files:
    - Dockerrun.aws.json
...