【问题标题】:Deploy mysql+springboot docker containers in AWS ECS在 AWS ECS 中部署 mysql+springboot docker 容器
【发布时间】:2020-11-22 11:43:24
【问题描述】:

我正在使用 docker 容器使用 mysql + springboot 进行简单的项目,并且我能够在本地运行而没有任何问题。我试图将相同的容器带到 AWS ECS 以使其正常运行,但我面临着多个问题。我确实研究了多个文档和博客,但无法获得正确的内容来完成这项工作。

我使用下面的方法在我的本地用“mysqlcontainer”的容器名称来建立mysql

docker run --restart always --name mysqlcontainer --net dev-network -v /Users/myuser/Develop/mysql_data/8.0:/var/lib/mysql -p 3306:3306 -d
-e MYSQL_ROOT_PASSWORD=password mysql:8.0

一旦 mysql 站起来,我就运行以下命令来带上我的 springboot 应用程序。这是一个简单的springboot服务,对mysql进行CRUD操作。

docker run -d -p 8061:8061 --name user-mysqlapp --net dev-network
--link mysqlcontainer user-mysql

mysql 容器名称是“mysqlcontainer”,它在网络“dev-network”上运行,我在第二个 docker 命令中使用了这些容器和网络名称来支持 springboot 应用程序,因为两个容器需要在同一个容器中相互通信网络。

这里是 springboot 应用程序的 docker 文件。

FROM openjdk:8-jdk-alpine 
EXPOSE 8061 ARG
JAR_FILE=target/user-mysql.jar 
ADD ${JAR_FILE} user-mysql.jar
ENTRYPOINT ["java","-jar","user-mysql.jar"]

这是 springboot 应用程序中 application.yml 中使用的数据源。

 datasource:
    url:  jdbc:mysql://mysqlcontainer:3306/sample
    username: dummy
    password: password
    driver-class-name:  com.mysql.jdbc.Driver

在两个容器都运行后,我能够将mysql与mysqldeveloper连接起来,并能够执行以下命令。

CREATE USER 'dummy'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'dummy'@'%';
create database sample;
use sample;

我在本地执行此设置没有任何问题,我确实将 springboot 应用程序映像推送到 dockerhub 以在 AWS ECS 中使用。

问题陈述:

如果我在 ECS 中单独运行 mysql 容器,我可以运行它并使用本地的 mysql 开发人员进行连接。但如果我尝试运行 springboot 应用程序映像,它无法与 mysql 容器正确链接。我尝试使用 awsvpc 网络模式在 FARGATE 实例类型中无法提供指向 mysql 容器的链接。我确实尝试创建单个任务定义,其中添加了两个容器并且它们都成功运行,但是在 Spring Boot 日志中,它说无法创建与 mysql 容器的通信。

有人可以分享一些信息以在 aws ecs 中支持此设置或分享一些链接/教程/博客,我可以在其中查看此 mysql + springboot 应用程序设置如何在 aws ecs 中支持?如果我能够站起来这些容器,那么我需要创建/附加卷以将数据保存在 aws 中。提前谢谢...

【问题讨论】:

    标签: mysql spring-boot docker docker-compose amazon-ecs


    【解决方案1】:

    我能够在 ECS 中成功设置这个 spring boot + mysql setup。以下是遵循的步骤。

    1. 创建一个任务定义,其中首先添加 mysql 容器 where 为 mysql 容器提供必要的环境变量。
    2. 添加另一个设置依赖顺序的spring boot容器 容器作为 mysql 容器,条件为“START”。
    3. 创建新集群
    4. 在此集群上创建服务,然后在服务上添加此任务定义。

    由于我使用了 Fargate 类型,我们不能使用链接来引用其他容器,而是在 Spring Boot 应用程序 yml 数据源 url 中使用 127.0.0.1 ip 地址,以便它引用同一网络中的本地主机。这解决了容器链接问题,我相信我们会有更好的选择,但目前我正在使用这个选项。

     datasource:
        url:  jdbc:mysql://127.0.0.1:3306/sample
    

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 2017-12-30
      • 2017-07-30
      • 2021-01-24
      • 2023-01-22
      • 2016-05-20
      • 2016-05-30
      • 2017-09-30
      • 2020-11-15
      相关资源
      最近更新 更多