はじめに
個人開発で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
というのを定義する必要があるとか、必要ないとか、なかなか思うように辿り着かなかったですが、私がインターンさせて頂いている会社の中で、コンテナ間の通信をこのように行っていたので、とても衝撃を受けました。