3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ムラサメ研究所 学会Advent Calendar 2018

Day 4

docker-composeのlinksがいつのまにやら必要なくなってた

Last updated at Posted at 2018-12-03

はじめに

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の初期設定をデータを記載

結果

普通に接続できた。
スクリーンショット 2018-12-03 20.01.03.png

名前解決は特に何も設定しなくても行なってくれるようです。

尚、起動順を設定するdepends_onはまだまだ現役ですのでこちらは必要に応じて使っていけますね。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?