🐋
Dockerコンテナの通信
はじめに
Dockerコンテナで開発するときは、MySQLコンテナ、Goコンテナ、Nginxコンテナのような感じで機能ごとにコンテナを準備して開発します。Docker-composeを使用する場合自動的に接続してくれますが、個別にコンテナを立ち上げた場合は、ネットワークの設定が必要です。このネットワーク設定について調べてみました。
ネットワーク設定方法
- Dockerにネットワーク設定追加
今回はmy-net
というネットワークを準備しました。
docker network create my-net
- コンテナに名前とネットワークを指定して起動
MySQLコンテナ
docker run --name mysql --net my-net mysql:8.0.29
- 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コンテナ起動時にポートを解放します。
- MySQLコンテナ起動
docker run --name mysql --net my-net -p 3306:3306 mysql:8.0.29
- Go言語プログラム
Go言語からMySQLへアクセスする場合は、localhostを指定します。
dsn := "myuser:password@tcp(localhost:3306)/mydb"
db, _ = sql.Open("mysql", dsn)
- ターミナルでGoプログラムを起動
go run .
さいごに
Goコンテナでデバッグがまだちゃんとできていないので、できるようになるまでは、今回のやり方でプロジェクトを進めていこうと思います。
Discussion