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

时间:2017-01-27 08:30:51

标签: docker docker-compose

我希望在docker mysql中关联AWS Mysql RDS,而不是yml file容器数据库链接。有可能吗?

 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"

2 个答案:

答案 0 :(得分:2)

您可以通过以下几种方式从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

我会设置我的环境,以便在运行时,我bind mount一个属性文件,为容器提供所有必需的值:

OperationEngine:
 volumes:
   - /secure/config/database.properties:/config/database.properties

/secure/config目录是Docker主机上文件系统的一部分。如何创建和填充该目录是最新的。通常我通过让我的环境设置脚本创建目录然后将私有Git存储库克隆到包含该环境的正确配置的此目录来实现此目的。当然,只有具有所需权限级别的用户才能查看包含敏感配置详细信息的Git存储库,即生产系统。

希望有所帮助。

答案 1 :(得分:-1)

不,我没有在我的yml文件中创建网络。下面是我的yml文件的整个内容,所以需要进行哪些更改?

mysql_db:       image:mysql:5.6       container_name:shishir_db       环境:         MYSQL_ROOT_PASSWORD:" xxxxxxxx"         #MYSQL_USER:" shishir"         #MYSQL_DATABASE:" shishir1"         MYSQL_PASSWORD:" xxxxxxxx"       端口:          - " 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/