RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

WSL2+Docker でISUCONの問題に挑戦しよう!

こんにちは、あるいはこんばんは。だいたいサーバサイドのエンジニアの(@taclose)です☆

もうあと1か月でISUCON13ですね!お祭りですね!

という事で、今日はWindows上でISUCONの環境を構築して、是非練習してもらえたらなと記事を書きました!

これを参考にしながら是非、みなさんもトライしてみてください!

読者ターゲット

  • ISUCONをDocker使って練習したい!
  • dockerとかなんとなくはわかるよ!

前書き

「WSL上でISUCON環境構築」「Mac上で~」という記事はちらほら見かけるのですが、WSL2上に環境構築となると罠がちらほらあるものです。 なので、自分がつまづいたポイントとかを挟みながら説明していこうと思います。

各手順は何も準備されていない前提で書いています。「それは準備出来てるぜ!」という項目は飛ばして進めちゃってくださいね。

尚、今回はISUCON11の本番問題をインストールする手順ですが、基本的にはgitから落とすproject次第で手順はほぼ変わりません。

手順1:Docker Composeを使えるようにする(Rancher Desktopのインストール)

以下のRancher DesktopWindowsにインストールしてください。

rancherdesktop.io

特段詰まるポイントはないかと思いますが、WindowsでRancher Desktopを使うには - とことんDevOps | 日本仮想化技術のDevOps技術情報メディアとかを参考にしながら進めてもらえればと思います。

手順2:WSL2(Ubuntu 22.04)を準備する

PowerShell上で以下のコマンドを実行する事でUbuntu-22.04のWSLが準備されます。

# WSL2を標準とする
> wsl --set-default-version 2

# Ubuntu-22.04をインストールする
> wsl --install -d Ubuntu-22.04

# インストールが終わったらログインしてみる
> wsl ~ -d Ubuntu

手順3:WSL2上でdockerのプロセス操作が出来るようにする

以下はRancher Desktopの設定画面です。WSLメニューのIntegrationsタブに、Ubuntuがあるはずなのでチェックを入れましょう。

WSL2上でdocker操作が出来るようにする

IntegrationsにUbuntuが表示されない方

もし表示されない方は、インストールされているWSLがWSL2じゃない可能性が高いです。 WSL2をブログ記事の通りにインストールし直すか、WSL1 から WSL2への移行 #WSL - Qiita これらを参考にしながらWSL2に移行してください。

手順4:Ubuntuのセットアップ

ISUCON環境構築するにあたり、必要なライブラリがいくつかありますので、以下のコマンドをWSL2(Ubuntu)上で実行してください。

# 時刻ずれてるとapt失敗する事があるので、念のため時刻調整
$ sudo hwclock --hctosys

# apt最新化しておく
$ sudo apt-get update -y

# isuconのdocker buildやbenchmarkerのbuildに使ってます
$ sudo apt install make

# benchmarkerのbuildに使います
$ sudo apt install -y golang-go

# docker buildで必要となるもの
$ sudo apt install gnupg2 pass
$ sudo apt-get install -y libsecret-1-0
$ sudo apt-get install dbus-x11

手順5:ISUCON11の環境構築

いよいよですね!ISUCON11の環境構築や、当日のレギュレーションなどがまとめられたリポジトリはこちらです。

github.com

これを直接落としてきても良いのですが、実際に行った改修の管理とかするためにもforkする事をお勧めします。

ISUCON11をforkする

以下の画像のボタンを押下する事で自分のリポジトリとしてforkする事ができます。 自由にcommitできるので、練習が捗りそうですね!

githubからISUCON11をforkする

ISUCON11のclone~起動まで

以下のコマンドをWSL2(Ubuntu)上の作業ディレクトリで行ってください。

# forkしてない場合はこうですが、forkしてる場合は書き換えてくださいね。
# リポジトリをcloneしてくる
$ git clone git@github.com:isucon/isucon11-final.git

# docker-composeを使って環境を構築する
# ※ちなみにMakefileを見てもらえれば、言語をGo以外にするコマンドとかわかります。
# 結構時間かかります。落としたい時はmake down。再起動したいなら make down; make upでOK
$ cd isucon11-final/dev/
$ make up &

# git clone行ったdirから見た移動です。
$ cd isucon11-final/benchmarker
$ make

ISUCON11を触ってみる

http://localhost:8080 にアクセスしてもらうとブラウザ上で実行出来ている事が確認できます。

また、以下のコマンドでBenchmarkerを走らせられます。

# benchmarker走らせてみる
$ ./isucon11-final/benchmarker/bin/benchmarker -target localhost:8080

localhostが解決出来ないって人!

試しにcurlコマンドで試してもらって以下のような状況になる日とはWSLからWindowsへの通信が出来ていない事となります。

# Ubuntu上で以下が出ちゃう人
$ curl -X GET localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Connection refused

原因としては色々ありますが、Rancher Desktopを使ってる方の場合、以下の設定を確認してください。

ここでこんな不具合の人少ないのかな... 的はずれな記事ばかりに行き当たってしまい苦労しましたOrz

私は過去に何かで通信うまくいかないので困惑した時に、これをチェックしてしまっていたのが原因だったようです。

最後に

環境構築終わりましたか!?ここからが始まりですからね!

この環境ならAWSの利用料金とか気にせずに好きな時にISUCONの練習できるのがうれしいですよね!

自宅のMacでも試してみたんですが、ほぼ同じ手順で環境構築問題なかったので皆さんも参考にしてみてください。

ではISUCON本番でお会いしましょう!

参考記事等

GitHub - isucon/isucon11-final: ISUCON11 本選 (ISUCHOLAR) WindowsでRancher Desktopを使うには - とことんDevOps | 日本仮想化技術のDevOps技術情報メディア WSL1 から WSL2への移行 #WSL - Qiita

Copyright © RAKUS Co., Ltd. All rights reserved.