Help us understand the problem. What is going on with this article?

いい加減docker-composeでlinksを使うのをやめてnetworkでコンテナ間名前解決をする

Dockerの --link や docker-composeの links が古臭い手法になっていることは認識していたが、特に不便を感じておらず使い続けてしまっていたのでnetworkをちょっと調べてみる。

docker-compose.yamlマイグレーション

linksで名前解決

version: '3'

services:
  web1:
    image: nginx:alpine
    links:
      - web2:web2
  web2:
    image: nginx:alpine

このようなごくシンプルな例で検証してみる。

links:
  - web2:web2

の部分でweb1→web2へアクセスできるようにし、名前解決も行えるようにしたつもり。

ではweb1からweb2へcurlコマンドを叩いてみる。

$ docker-compose up -d
$ docker-compose exec web1 sh
# apk --update add curl
# curl web2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

ここまでOK。
既知の領域。

networkで名前解決

続いてlinksを使うのをやめるバージョン。

ドキュメントによると、

デフォルトでは、Compose はアプリケーションに対して ネットワーク を1つ設定します。

network: を書かなくてもデフォルトでnetworkは生成され、各コンテナはそのnetworkに参加した状態になるということのようだ。

さらに、

Docker のリンク(link)は、一方通行の単一ホスト上における通信システムです。この機能は廃止される可能性があり、アプリケーションはネットワーク機能を使うようにアップデートすべきです。 多くの場合は、docker-compose.yml で link セクションを削除するだけです。

ということなので links: を削除しただけのyamlが下記。

version: '3'

services:
  web1:
    image: nginx:alpine
  web2:
    image: nginx:alpine

名前解決がどのように行われるのかというと、

リンク機能(links)とは、他のサービスから到達可能なエイリアス(別名)を定義するものです。サービス間で通信するために必要ではありません。すなわち、 デフォルトでは、あらゆるサービスはサービス名を通して到達できます

サービス名が自動的にそうなるのか、なるほど、ということで下記を検証。

$ docker-compose up -d
$ docker-compose exec web1 sh
# apk --update add curl
# curl web2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

問題なくweb1からweb2にアクセスできた。

もちろんweb2→web1の名前解決も可能。

$ docker-compose exec web2 sh
# apk --update add curl
# curl web1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away