如何在docker-compose.yml文件中连接MySQL RDS?

5

我想在docker的yml文件中链接AWS Mysql RDS,而不是下面的mysql容器DB链接。这种情况可行吗?

 mysql_db:
      image: mysql:5.6
      container_name: shishir_db
      environment:
        MYSQL_ROOT_PASSWORD: "xxxxxxxx"
        #MYSQL_USER: "shishir"
        #MYSQL_DATABASE: "shishir1"
        MYSQL_PASSWORD: "xxxxxxxx"
      ports:
        - "3306:3306"

1
你所说的"link"是什么意思?MySQL RDS是一个托管服务,您的应用程序连接到该服务。也许您想知道如何允许容器与数据库的IP地址和端口建立网络连接吗? - Panagiotis Kanavos
您发布的内容似乎是尝试在容器中包含MySQL镜像,而不是连接到RDS。 - Panagiotis Kanavos
当我执行“docker-compose up”命令时,会创建一个mysql容器并将应用程序连接到它,但我不想这样做,因为我有一个RDS mysql数据库,所以每次执行compose-up命令时,应用程序需要连接到RDS。 - Shishir
为了实现这个,我需要在yml文件中做哪些更改?或者我应该在yml文件中添加什么内容来代替上面的mysql内容呢? - Shishir
创建了一个MySQL容器,因为这是您要求的。只是不要使用那个镜像。我已经回答了您应该寻找什么 - 设置网络环境。您在yml文件中设置了网络吗? - Panagiotis Kanavos
我还没有创建任何网络。以下是我的整个yml文件内容,请告诉我需要做哪些更改。 - Shishir
2个回答

4

您可以有几种方法从docker-compose.yml连接到 AWS RDS MySQL 实例。

第一种方式,也许是最简单的方法是在需要访问 RDS MySQL 实例的容器上设置环境变量。例如,您可以更新OperationEngine服务定义,使其看起来像:

OperationEngine:
 image: shishir/operationengine:${RELEASE_OTA_VERSION}
 container_name: operation_engine
 ports:
   - "8080:8080"
 environment:
  - DOCKER_HOST_IP: ${DOCKER_HOST_IP}
  - JAVA_OPTS: ${JAVA_OPTS}
  - MYSQL_HOST: "your-mysql-cname.rds.amazon.com"
  - MYSQL_USER: "username"
  - MYSQL_PASSWORD: "password"
volumes:
  - ${HOME}/operationengine/logs/:/usr/local/tomcat/logs/

您可以在服务中更新配置,以从环境中读取数据库连接详细信息,例如${MYSQL_HOST}
这种方法的明显缺点是您将连接详细信息存储为纯文本在您的docker-compose.yml中,这不太好,但根据您的要求可能是可以接受的。
第二种方法(我倾向于使用的方法)是将数据库配置绑定到正在运行的容器中。
大多数应用程序支持从属性文件中读取数据库连接详细信息。例如:假设在启动时,您的应用程序从/config/database.properties读取并需要以下属性才能连接到数据库:
config.db.host=your-mysql-cname.rds.amazon.com
config.db.user=foo
config.db.password=bar

我会设置我的环境,以便在运行时,使用绑定挂载的方式,将一个属性文件提供给容器中的所有必需值:

OperationEngine:
 volumes:
   - /secure/config/database.properties:/config/database.properties
/secure/config目录是Docker主机文件系统的一部分。该目录的创建和填充方式由您决定。通常我会通过环境设置脚本创建该目录,然后将包含该环境正确配置的私有Git存储库克隆到此目录中。当然,只有具有所需权限级别的人才能查看包含敏感配置详细信息的Git存储库,例如生产系统。
希望这有所帮助。

请问您能否提供任何解释yml文件格式更好的链接? - Shishir
@Shishir 官方文档在这里:https://docs.docker.com/compose/compose-file/ - Rob Lockwood-Blake

0

不,我在我的yml文件中没有创建网络。以下是我的yml文件的全部内容,那么需要做哪些更改呢?

mysql_db: image: mysql:5.6 container_name: shishir_db environment: MYSQL_ROOT_PASSWORD: "xxxxxxxx" #MYSQL_USER: "shishir" #MYSQL_DATABASE: "shishir1" MYSQL_PASSWORD: "xxxxxxxx" ports: - "3306:3306"

zookeeper:
  image: wurstmeister/zookeeper
  container_name: zookeeper
  ports:
   - "2181:2181"

kafka:
  image: shishir/kafkaengine:0.10
  container_name: kafka
  links: 
   - zookeeper
  ports:
   - "9092:9092"
  environment:
   KAFKA_ADVERTISED_HOST_NAME: ${DOCKER_HOST_IP}
   KAFKA_ZOOKEEPER_CONNECT: ${DOCKER_HOST_IP}:2181
   KAFKA_ADVERTISED_PORT: 9092
   KAFKA_CREATE_TOPICS: ${KAFKA_TOPICS}
   KAFKA_ZOOKEEPER_SESSION_TIMEOUT_MS: 12000
   KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 12000

flywaydb:
  image: shishir/flywaydb
  container_name: flywaydb
  links:
   - mysql_db

OperationEngine:
  image: shishir/operationengine:${RELEASE_OTA_VERSION}
  container_name: operation_engine
  links:
   - mysql_db
  ports:
   - "8080:8080"
  environment:
   DOCKER_HOST_IP: ${DOCKER_HOST_IP}
   JAVA_OPTS: ${JAVA_OPTS}
  volumes:
   - ${HOME}/operationengine/logs/:/usr/local/tomcat/logs/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接