Docker-composeを使用して、完全な開発スタックを構築しています。
アプリケーションが動作するにはmysqlサーバーが必要です。
Mysqlサーバーは、docker-composeによる外部コンテナーのセットアップです。
mysql:
image: mysql:5.6
volumes:
- /data/mysql:/var/lib/mysql
- ./docker/mysql.d:/etc/mysql/conf.d
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
アプリケーションには独自のdocker-compose.ymlがあり、mysqlコンテナーを参照します。
my-application:
build: . # the Dockerfile resides in the current folder
ports:
- "9180:80"
- "9543:443"
external_links:
- mysql_mysql_1:mysql
environment:
DOCKER_ENVIRONMENT: dev
DB_NAME: local_db
DB_PASS: password
DB_USER: root
DB_Host: # how to set the mysql's IP address?
動的なので、docker-composeに渡すことはできません。
特定の変数が設定されているため、アプリケーションがmysql IPアドレスを認識していることを知っています。
application-container$ env|grep ADDR
MYSQL_PORT_3306_TCP_ADDR=172.17.0.241
しかし、これは私の必須のDB_Host
ではありません。
変数を何らかの方法でDB_Host
にマッピングしたり、別の方法で設定したりできますか?
IPを設定する必要はありませんが、コンテナーの仮想ホスト名を参照できます。これは、リンクされたコンテナーの名前と同じ値です。
つまり、links
(推奨)またはdocker-compose.yml
を使用して、external_links
内からDB_Hostを実際に設定できます。
your_application:
build: .
ports:
- "9180:80"
- "9543:443"
external_links:
- mysql_mysql_1:docker-mysql
environment:
DB_Host: docker-mysql
Dockerコンテナーに接続するときは、mysqlコンテナーに接続できます。
application-container $ mysql -h docker-mysql -uroot -ppassword -p 3360
同じdocker-composer.ymlからコンテナをリンクしても同様に機能します。
これも 文書化 :
別のサービスのコンテナにリンクします。サービス名とリンクエイリアスの両方(SERVICE:ALIAS)を指定するか、サービス名のみを指定します(エイリアスにも使用されます)。
links: - db - db:database - redis
エイリアスの名前を持つエントリは、このサービスのコンテナ内の/ etc/hostsに作成されます。例:
172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis
環境変数も作成されます-詳細については、 環境変数リファレンス を参照してください。