はじめに
個人開発でDockerとdocker-composeを使って構築しようとした際、フロントエンドとバックエンドをそれぞれのコンテナで立ち上げたとき、コンテナ間で通信をする方法がすぐにわからなかったので、その方法について共有させて頂きます🙏
今回はコンテナ間の通信のみ説明をします。Dockerやdocker-composeの詳細な使用方法については説明しません。あらかじめご了承ください。
方法
とてもシンプルで、docker-conmpose.yml で作成したサービス名と、使用したいポートを指定するだけで可能です。
今回はNode.js上でサーバーを動かすことができるライブラリExpress.jsを使用し、expressとwebというサービス名でコンテナを構築しようと思います。
services:
express:
build: ./express
# ...以下省略...
web:
build: ./web
expressの方では、Express.js公式サイトのHello Worldの例を使用します。
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
その後、docker-compose up等でコンテナを起動し、webコンテナのターミナルでcurl express:3000と入力すると、Example app listening on port 3000が返ってくると思います!
最後に
ネットで調べてみると、docker-compose.yamlでnetworksというのを定義する必要があるとか、必要ないとか、なかなか思うように辿り着かなかったですが、私がインターンさせて頂いている会社の中で、コンテナ間の通信をこのように行っていたので、とても衝撃を受けました。