Open3
private-isuをdockerでセットアップした時のメモ
前提
- ポート番号80と3306をexposeします
セットアップ
- ポジトリをクローンする
git clone https://github.com/catatsuy/private-isu.git
cd private-isu
- 大量テストデータ生成するsqlファイル(1.2Gある)をダウンロード
docker-compose.ymlの中で、webapp/sql
フォルダをmysqlのコンテナの/docker-entrypoint-initdb.d
にマウントしているので、sqlを置いておけばコンテナ起動時に実行される
cd webapp/sql
curl -L -O https://github.com/catatsuy/private-isu/releases/download/img/dump.sql.bz2
bunzip2 dump.sql.bz2
- アプリをruby以外の実装にしたい場合はこのタイミングで変更しておく。ここではphpに変更する。
cd ..
sed -i -e 's/build: ruby/build: php/' docker-compose.yml
# for Mac
sed -i "" -e 's/build: ruby/build: php/' docker-compose.yml
appの書き換わっていること
% git diff
diff --git a/webapp/docker-compose.yml b/webapp/docker-compose.yml
index aa026f8..96c23fc 100644
--- a/webapp/docker-compose.yml
+++ b/webapp/docker-compose.yml
@@ -11,7 +11,7 @@ services:
app:
# Go実装の場合は golang/ PHP実装の場合は php/
- build: ruby/
+ build: php/
environment:
ISUCONP_DB_HOST: mysql
ISUCONP_DB_PORT: 3306
- nginxの設定ファイルをphp用に用意されているものに差し替える
mv etc/nginx/conf.d/default.conf etc/nginx/conf.d/default.conf.org
mv etc/nginx/conf.d/php.conf.org etc/nginx/conf.d/php.conf
- docker composeで起動する
docker compose up -d
- アプリを変更したらappのイメージを作り直してコンテナを再作成する
docker compose stop app && docker compose rm -f app && docker compose build app && docker compose up app -d
- appコンテナでtopコマンドなどを使いたい場合はコンテナに入って
apt install procps
を実行する
ps, top, vmstat, sysctl, w, kill, skill, nice, snice, pgrep, free, tload, uptime, watch
がリリースされます
benchmarkerのセットアップ
- benchmark実行で使用する画像をダウンロードする
cd ../benchmarker/userdata
curl -L -O https://github.com/catatsuy/private-isu/releases/download/img/img.zip
unzip img.zip
rm img.zip
cd ..
- benchmarkerのdockerイメージをビルド
ローカルでも実行できるけど、Goのセットアップが不要なのでコンテナを使うと便利
docker build -t private-isu-benchmarker .
- benchmarker実行の実行方法
docker run --rm --network host -i private-isu-benchmarker /opt/go/bin/benchmarker -t http://localhost -u ./userdata
ツールのセットアップ
- alpのインストール
# for Mac
brew install alp
他の環境へのインストール方法は公式を見てください。
- pt-query-digestをインストール
# mysqlコンテナにインストールする場合
apt update && apt install percona-toolkit
# for Mac
brew install percona-toolkit
コマンド チートシート
- コンテナのログを流しっぱなしにする(mysqlに絞りたい場合は
docker compose logs mysql -f
)
docker compose logs -f
- コンテナの中に入る
docker compose exec -it nginx bash
docker compose exec -it app bash
docker compose exec -it mysql bash
mysqlの操作
- mysqlコマンド起動
docker compose exec -it mysql mysql -uroot -proot isuconp
以下、mysqlコマンドの操作
- データベース一覧表示
show databases;
- データベース切り替え
use isuconp;
- テーブル一覧表示
show tables;
- テーブル定義表示
show create table users;
show create table posts;
show create table comments;
- プロセスリストを取得
show processlist;
- 設定一覧を取得
SHOW VARIABLES;
- SQLファイルを実行
cat sql/dump.sql|docker compose exec -T mysql mysql -uroot -proot
- alpでアクセスログ確認
cat logs/nginx/access.log|alp json
同類のアクセスを集約して見たい場合は、-m "/image/.+,/posts/[0-9]+,/@.+"
の用にオプションを付与する
- pt-query-digest実行
pt-query-digest logs/mysql/mysqlslow.log
- コンテナのCPUやメモリ使用率などを確認する
docker stats
出力
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
11c9ba37fc91 webapp-nginx-1 0.00% 4.629MiB / 7.752GiB 0.06% 1.05kB / 0B 1.28MB / 0B 5
81854fd3a751 webapp-app-1 0.01% 37.74MiB / 1GiB 3.69% 1.02MB / 5.5kB 51MB / 2.85MB 4
b66277ea328a webapp-memcached-1 0.01% 3.777MiB / 7.752GiB 0.05% 1.38kB / 0B 975kB / 0B 10
2f95540c4d2f webapp-mysql-1 1.17% 397.1MiB / 1GiB 38.78% 1.49kB / 0B 44.9MB / 15.4MB 38
ISUCON本の付録Aをやってみたログ
ネタバレですので、自力で試したい人は見ないで。