🐋

Dockerコンテナの通信

2025/01/31に公開

はじめに

Dockerコンテナで開発するときは、MySQLコンテナ、Goコンテナ、Nginxコンテナのような感じで機能ごとにコンテナを準備して開発します。Docker-composeを使用する場合自動的に接続してくれますが、個別にコンテナを立ち上げた場合は、ネットワークの設定が必要です。このネットワーク設定について調べてみました。

ネットワーク設定方法

  1. Dockerにネットワーク設定追加
    今回はmy-netというネットワークを準備しました。
docker network create my-net
  1. コンテナに名前とネットワークを指定して起動

MySQLコンテナ

docker run --name mysql --net my-net mysql:8.0.29
  1. Go言語プログラム
    Go言語からMySQLへアクセスする場合は、MySQLコンテナの名前(今回はmysql )を指定します。
dsn := "myuser:password@tcp(mysql:3306)/mydb"
db, _ = sql.Open("mysql", dsn)

Goコンテナ

docker run --name golang-d --net my-net golang_console:dockerfile 

ネットワーク情報

コンテナでネットワーク情報を確認してみます

> docker inspect mysql --format '{{json .NetworkSettings.Networks}}' mysql > my-net.json

確認するとIPアドレスが割り当てられていることが分かります。

{
  "my-net": {
    "IPAMConfig": null,
    "Links": null,
    "Aliases": ["01cf107f7b98"],
    "NetworkID": "b2c7b526e06e751859383ccc6eb76fcaf9a6402ec41a897c9a0fe5ffb05f14ff",
    "EndpointID": "5b386b79f3c7a658bf3ffc77470806f74e91869b34fb861156659322701b2b17",
    "Gateway": "172.18.0.1",
    "IPAddress": "172.18.0.2",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:12:00:02",
    "DriverOpts": null
  }
}

MySQLコンテナにコンテナを使用しないプログラムからアクセスする方法

コンテナを作成せずに簡易的に通信し確認したい場合は、MySQLコンテナ起動時にポートを解放します。

  1. MySQLコンテナ起動
docker run --name mysql --net my-net -p 3306:3306 mysql:8.0.29
  1. Go言語プログラム
    Go言語からMySQLへアクセスする場合は、localhostを指定します。
dsn := "myuser:password@tcp(localhost:3306)/mydb"
db, _ = sql.Open("mysql", dsn)
  1. ターミナルでGoプログラムを起動
go run .

さいごに

Goコンテナでデバッグがまだちゃんとできていないので、できるようになるまでは、今回のやり方でプロジェクトを進めていこうと思います。

Discussion