説明のために手順を確認したので、その覚書。
github.com
$ git clone git@github.com:isucon/isucon12-qualify.git
Dockerをインストールする
www.docker.com
値上げが最近話題になりましたが、個人利用は無料です。
www.docker.com
次回はRancher Desktopを試してみます。
rancherdesktop.io
docker-compose.ymlを書き換える
一箇所だけ書き換えないと、起動しません。
Docker Hubから「mysql/mysql-server:8.0.29」のイメージが無くなっていて、MySQLが起動できません。8.0.30以降のバージョンを指定しましょう(無くなった理由は探せませんでした...)。
2022/11/06追記
mysql-serverのバージョンを上げるPRを作って、それが取り込まれたので、これからクローンした場合は、上記の修正は不要となっています。
github.com
また、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
初期スコアを確認して、あとはチューニングを始めましょう。
チューニングの準備
当日のマニュアルは熟読しましょう。
ISUCON12 予選当日マニュアル · GitHub
そもそもアプリケーションの仕様が分からないと何もできないので、じっくり読みましょう。
github.com
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の件、いくつか情報をいただきました。なるほどー酷いバグだ......
というわけで、PRを作成しておきました。
github.com
あと、Docker Desktop for Macのネットワークについても情報をいただきました。
docker-compose
と、docker compose
は違うとは......こちらも引き続き調べてみたいと思います。
現在では、docker-compose
と、docker compose
は同じV2を向いているようです。
qiita.com
Docker Desktop for Mac 4.13.1をクリーンインストールしたところ、docker-compose
もV2を使う設定が最初からオンになっていました。