2017-01-27 3 views
0

mysqlコンテナDBリンクの代わりに、AWS Mysql RDSをドッカーのyml fileにリンクしたいと考えています。出来ますか?docker-compose.ymlファイルでMySQL RDSをリンクするにはどうすればよいですか?

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" 
+0

「リンク」とはなんですか? MySQL RDSは、アプリケーションが接続する管理対象サービスです。あなたのコンテナからあなたのデータベースのIPとポートへの*ネットワーク接続*を許可する方法を尋ねていますか? –

+0

あなたが投稿したものは、あなたのコンテナにMySQLイメージを含める試みのようです* RDSに接続しない* –

+0

"docker-compose up"を実行すると、mysqlコンテナが作成され、しかし、私はこの方法が欲しくない、私は私と一緒にRDSのmysqlのDBを持っているので、私は構成を行うwhenevr、アプリケーションはRDSに接続する必要があります。 – Shishir

答えて

0

いいえ、私はymlファイルでネットワークを作成していません。以下は私のymlファイルの全体の内容なので、どのような変更が必要でしょうか?

mysql_db: 画像: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/ 
1

あなたdocker-compose.ymlからAWS RDS MySQLインスタンスにリンクすることができますいくつかの方法があります。

RDS MySQLインスタンスにアクセスする必要があるコンテナに環境変数を設定するのが最も簡単な方法です。あなたはその後、環境例えば${MYSQL_HOST}からデータベース接続の詳細情報を読み取るために、そのサービスで構成を更新することができます

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/ 

:だからたとえば、次のようなものを見て、あなたのOperationEngineサービス定義を更新することができます。

このアプローチの明らかな欠点は、docker-compose.ymlにプレーンテキストとして保存されている接続の詳細があることです。これはあまり良くありませんが、要件によっては許容される場合もあります。

第2のアプローチ(と私が好む傾向があるもの)は、実行中のコンテナにデータベース構成をマウントすることです。

ほとんどのアプリケーションでは、プロパティファイルからデータベース接続の詳細を読み取ることができます。例として:

config.db.host=your-mysql-cname.rds.amazon.com 
config.db.user=foo 
config.db.password=bar 

私はセットアップ私の環境をだろう、実行時に、私bind mount性質があることを提出するよう:スタートアップアプリケーション/config/database.propertiesから読み取られ、データベースに接続するには、次のプロパティを必要にそれを言うことができますコンテナに必要なすべての値を提供します。

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

/secure/configディレクトリがドッカーホスト上のファイルシステムの一部です。そのディレクトリがどのように作成され、読み込まれているかは最新のものです。通常、私は環境設定スクリプトでディレクトリを作成し、プライベートGitリポジトリをこのディレクトリにクローンして、その環境に適した設定を含むようにします。必然的に必要な権限レベルを持つ人だけが、機密性の高い設定情報を含むGitリポジトリ、つまり本稼動システムを見ることができます。

希望に役立ちます。

+0

が意味を持ちます。エラーからたくさんのものを取り除いている。 – Shishir

+0

ymlファイルの形式をよりよく説明するリンクを教えてください。 – Shishir

+0

@Shishir公式の文書はこちらです:https://docs.docker.com/compose/compose-file/ –

関連する問題