在AWS ECS中部署mysql + springboot docker容器

时间:2020-08-02 03:00:38

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

我正在使用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容器名称是在网络“ dev-network”上运行的“ mysqlcontainer”,我已经在第二个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容器。我确实尝试创建单个taskdefinition,其中添加了两个容器,并且两个容器都成功运行,但是在spring boot日志中,它说无法创建与mysql容器的通信。

有人可以分享一些信息以在AWS ECS中支持该设置吗?还是可以分享一些链接/教程/博客,我可以在其中看到mysql + springboot应用程序设置如何在AWS ECS中支持?如果我能够站起来这些容器,那么我需要创建/附加卷以将数据持久存储在AWS中。预先感谢...

1 个答案:

答案 0 :(得分:0)

我能够在ECS中成功设置此春季启动+ mysql设置。以下是遵循的步骤。

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

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

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