はじめに
docker-composeでコンテナ間をつなげる時の方法として、検索するとよくlinksを使うソースがかかれていることが多い。
こんな感じに
version: '3'
services:
app:
image: node
links:
- db
db:
image: mysql
このlinks
オプションだがもうレガシー機能でそのうち削除されるらしい。
公式リファレンス
試してみた
node.jsからmysqlのテーブル情報を読み出してjsonで表示する簡単なページを作成
DB名:testdb
テーブル名:user
カラム:name, password
ディレクトリ構成
構成はで以下のように設定
project/
├── app.js
├── docker
│ ├── construct_app
│ │ └── Dockerfile-app
│ └── construct_db
│ ├── Dockerfile-db
│ └── init-conf.sql
├── node_modules
├── docker-compose.yml
├── package-lock.json
└── package.json
ファイルの中身(一部)
app.js
var express = require('express');
var mysql = require('mysql');
var app = express();
app.get('/', function(req,res){
var connection = mysql.createConnection({
host : 'db',
user : 'testuser',
password : 'testpass',
database : 'testdb'
});
connection.connect();
connection.query('SELECT * FROM user;', function (error, results, fields) {
if (error) throw error;
res.json({
username:results[0].name,
password:results[0].password
});
});
connection.end();
});
app.listen(5000);
docker-compose.yml
version: '3'
services:
app:
build:
context: ./docker/construct_app # Dockerfile保存場所
dockerfile: Dockerfile-app # Dockerfileファイル名
image: links-test-app # イメージ名
container_name: links-test-app # コンテナ名
ports:
- 5000:5000
volumes: # mount workdir
- ./:/src
command: [sh, -c, npm install && node app.js]
# links:
# - db
db:
build:
context: ./docker/construct_db # Dockerfile保存場所
dockerfile: Dockerfile-db # Dockerfileファイル名
image: links-test-db # イメージ名
container_name: links-test-db # コンテナ名
environment:
- "MYSQL_ROOT_PASSWORD=root" # ルートのパスワードが必要
Dockerfileにはベースイメージと環境変数などを記載
init-conf.sqlはmysqlの初期設定をデータを記載
結果
名前解決は特に何も設定しなくても行なってくれるようです。
尚、起動順を設定するdepends_on
はまだまだ現役ですのでこちらは必要に応じて使っていけますね。