Magnolia Tech

いつもコードのことばかり考えている人のために。

ISUCON12予選問題をdocker-composeで起動する - 続き...network_modeのhost指定を止める

blog.magnolia.tech

前回のエントリの続き...前回、macOS版のDocker Desktopではnetwork_modehostを指定すると、Docker Desktopが起動しているLinux仮想マシンがホストになってしまうため、macOS側のブラウザではトップページへアクセスできないと書いた。

というわけで、network_modeからhostの指定をすべて削除した。

networkの作成

変更した箇所はリンク先のリポジトリに書かれている。

github.com

docker-compose.yml

  • ファイル名docker-compose.ymlは、今では非推奨になっていて、compose.yamlが推奨になっているので、ファイル名を変更
  • compose.yamlでは、フォーマットのversion指定は必要がないと公式ドキュメントに書かれていたので、削除
  • 新しくisucon-tierというネットワークを作成し、コンテナはすべてそこに属するように修正した
  • すべてのhost指定を削除した
  • linksをやめて、depends_onに修正

nginxの設定変更

  • IPアドレスが、他のサービスなのに127.0.0.1で指定されている箇所について、名前解決可能なFQDN(ここではサービス名)に修正 networkを新しく作るとサービス名、コンテナ名などでの名前解決が可能となる

data/Makefileの修正

data/Makefileの中でmysqlが同じホストで動いている前提になっているので、127.0.0.1をすべてホスト名(service名)としてのmysqlに変更。 また、portも13306になっている箇所は、すべて元の3306に修正。

その後、初期データのビルドを行う。

$ cd /home/isucon/data
$ make build-for-docker-compose

ベンチの実行

nslookupで、nginxが動いているサーバのIPアドレスを取得

$ nslookup nginx
...

Non-authoritative answer:
Name:   nginx
Address: 172.18.0.4

取得したIPアドレスを指定して、ベンチマークを実行

$ go run cmd/bench/main.go -target-url https://t.isucon.dev --target-addr 172.18.0.4:443

成功!

ベンチマークの数値は特に変わらず(当たり前)

ブラウザからのアクセス

/etc/hostsに、127.0.0.1admin.t.isucon.dev指定でアクセスできるように追記

ブラウザを起動し、https://admin.t.isucon.devへ接続...サーバ証明書の期限が切れていた...終了...

curlは、証明書を検証しないオプションがあるので、それを指定して実行

$ curl -k https://admin.t.isucon.dev

JavaScriptが必要なサイトなので、JavaScriptを有効してね!というメッセージが出て終了......とりあえず到達はしている模様......


とりあえず、環境は整備できたので、次はアプリケーション側に手を入れるナニカをやります。