説明のために手順を確認したので、その覚書。
作業環境にリポジトリを用意する
$ git clone git@github.com:isucon/isucon12-qualify.git
Dockerをインストールする
値上げが最近話題になりましたが、個人利用は無料です。
次回はRancher Desktopを試してみます。
docker-compose.ymlを書き換える
一箇所だけ書き換えないと、起動しません。
Docker Hubから「mysql/mysql-server:8.0.29」のイメージが無くなっていて、MySQLが起動できません。8.0.30以降のバージョンを指定しましょう(無くなった理由は探せませんでした...)。
2022/11/06追記
mysql-serverのバージョンを上げるPRを作って、それが取り込まれたので、これからクローンした場合は、上記の修正は不要となっています。
また、Go言語以外の言語で動かす場合は、webappのサービスに指定されているbuild
のパスを言語に合わせて書き換えます。
コンテナを起動します。
$ docker-compose up
initial_dataを展開する
初期データを展開します。
benchのコンテナにrootでログインします。
$ docker exec -u 0 -it isucon12-qualify-bench-1 bash
isucon
ディレクトリへ移動して、initial_data.tar.gz
をダウンロードします。
$ cd /home/isucon $ curl -LO https://github.com/isucon/isucon12-qualify/releases/download/data%2F20220712_1505-745a3fdfb5783afc048ecaebd054acd20151872d/initial_data.tar.gz $ tar xvf initial_data.tar.gz
docker-compose.ymlのvolumes
セクションで用意したストレージの権限がrootになっていて、このままだとアプリの実行時に権限エラーになるので、まとめて書き換えておきます。
$ chown -R isucon:isucon /home/isucon
一回抜けて、isuconユーザーで再ログインする。
$ docker exec -it isucon12-qualify-bench-1 bash
最後に、初期データを準備する。
$ cd /home/isucon/data
$ make build-for-docker-compose
これで準備完了。
最初のベンチマークを取得する
$ cd bench
$ ./bench
初期スコアを確認して、あとはチューニングを始めましょう。
チューニングの準備
当日のマニュアルは熟読しましょう。
そもそもアプリケーションの仕様が分からないと何もできないので、じっくり読みましょう。
webapp
以下のディレクトリは、ビルドのたびにホストマシンのリポジトリの内容がコンテナ内のストレージにコピーされてからビルドが開始されます。
なので、アプリケーションコードの修正は、慣れた手元の環境でやると良いでしょう。
ISUCON本を用意する
用意ができたらISUCON本を見ながら、チューニングを始めましょう。
その他
- Docker Desktop for Macでは
network_mode
をhost
指定すると、本当のホストマシンであるmacから見えなくなってしまいます。せっかく作り込まれたフロントエンドの画面が見れないのはちょっと寂しいので、別の手段で環境を構築してみましょう。ネットワーク構成を作り直しても良いでしょう。 - docker-compose.ymlや、Dockerfileの読み方は最低限理解しておくと良いでしょう。アプリケーションの切り替えや、再ビルドの方法がわからないとチューニングしても意味がないので。
- 用意されている参照実装は一通り実行してみましょう。全部のソースを見るのは大変だけど、3種類くらい比較して見てみると面白いです。
useradd
コマンドでグループ名を指定しない時の挙動が分からなかったので、調べたところ、/etc/default/useradd
に書かれていました。そこなんだ?
# The default behavior (when -n and -g are not specified) is to create a # primary user group with the same name as the user being added to the # system.
2022/11/6 追記
MySQL 8.0.29の件、いくつか情報をいただきました。なるほどー酷いバグだ......
8.0.29、AWSのRDSでも選べなくていくつかクラッシュ系のバグがあった気がする
— でえもん (@dmnlk) 2022年11月6日
ISUCON12予選問題をdocker-composeで起動する - Magnolia Tech https://t.co/yOONoANRee
あんまり大きな声では言えませんが、運用に支障が出るレベルの問題があったので公開停止しました。
— tkyk04 (@taka_yuki_04) 2022年11月6日
どういうことがあったのかな?というのは30以降のリリースノートのbug fixedを見て予想してみてください。
答えの一つはコレです
— tkyk04 (@taka_yuki_04) 2022年11月6日
> InnoDB: After upgrading to MySQL 8.0.29, a failure occurred when attempting to access a table with an instantly added column. (Bug #34233264)https://t.co/JFQr9ZKQf8
mysql 8.0.29消えてるんですね…(いろいろ問題あったバージョンみたいです) あとでリポジトリ直しておきます。ありがとうございます
— fujiwara (@fujiwara) 2022年11月5日
というわけで、PRを作成しておきました。
あと、Docker Desktop for Macのネットワークについても情報をいただきました。
Docker Desktop for Macとnetwork_mode: hostの問題はもしかしたら違うかもしれませんが、docker compose v2(docker composeとハイフン無し)ならアクセスできた気がします。今出先なので不正確ですが https://t.co/2xLgSzXNva
— とっとこラム太郎🐑 (@mackee_w) 2022年11月6日
docker-compose
と、docker compose
は違うとは......こちらも引き続き調べてみたいと思います。
現在では、docker-compose
と、docker compose
は同じV2を向いているようです。
Docker Desktop for Mac 4.13.1をクリーンインストールしたところ、docker-compose
もV2を使う設定が最初からオンになっていました。