sunmingtao / sample-code

3 stars 4 forks source link

How to pass VM args to a Spring boot app in docker container #258

Closed sunmingtao closed 3 years ago

sunmingtao commented 3 years ago

Dockerfile

# For Java 11, try this
FROM adoptopenjdk/openjdk11:alpine-jre

# Refer to Maven build -> finalName
ARG JAR_FILE=target/*.jar

# cd /opt/app
WORKDIR /opt/app

# cp target/spring-boot-web.jar /opt/app/app.jar
COPY ${JAR_FILE} app.jar

# java $JAVA_OPTS -jar /opt/app/app.jar
ENTRYPOINT exec java $JAVA_OPTS -jar app.jar

Command line

docker build -f Dockerfile -t soccer-bet-rest-api .
docker run -p 8080:8080 -e JAVA_OPTS='-Damazon.aws.accesskey=*** -Damazon.aws.secretkey=***' soccer-bet-rest-api
sunmingtao commented 3 years ago

Follow up, to specify the environment variables in AWS ECS

In the console:

image

Cloudformation

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: soccer-bet-task
      Cpu: 256
      Memory: 512
      NetworkMode: awsvpc
      ExecutionRoleArn: !Ref ExecutionRole
      ContainerDefinitions:
        - Name: soccer-bet-container
          Image: 527875336349.dkr.ecr.ap-southeast-2.amazonaws.com/soccer-bet
          PortMappings:
            - ContainerPort: 8080
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-region: !Ref AWS::Region
              awslogs-group: !Ref LogGroup
              awslogs-stream-prefix: ecs
          Environment:
            - Name: JAVA_OPTS
              Value: -Damazon.aws.accesskey=*** -Damazon.aws.secretkey=***
      RequiresCompatibilities:
        - EC2
        - FARGATE