Dockerでgo環境を作る
isucon9予選の問題を使ってGoの環境をDockerで作ってみた。
※ isucon9予選の問題中に外部サービスへのアクセスがあって、運営が用意してくれてるそれにアクセスしないと全部の機能が使えない
やったことメモ
web
今回はnginxだった。
設定ファイルを読み込むためにDockerfileをbuildすることでコンテナを作ることにした。
webapp配下にwebサーバマウント用ディレクトリ web
を作って、そこに
- default.conf
- Dockerfile
をおいた。
app
- goは以下の機能を持っている(php-fpm的)
- リクエスト解釈
- 実行
- goはコンパイルするのでバイナリファイルさえあれば大丈夫。
- appにはbusyboxを採用した。(バイナリファイル実行するくん)
- docker-compose
working_dirを書かないと動かなかった。コンテナの、バイナリファイルがあるディレクトリを指定した。
db
今回はMySQLだったのでdockerhubからimage取ってきた。
- docker-compose
- 文字コードを指定するためにcommandに実行コマンドを記述した。デフォルトは
mysqld
- 文字コードを指定するためにcommandに実行コマンドを記述した。デフォルトは
- dockerを落とすとコンテナ内のデータが飛ぶので、データの実体があるディレクトリをローカルにマウントしておくことにした。
- webapp内にディレクトリ
db
を作ってそこにマウントした
- webapp内にディレクトリ
- コンテナ内
docker-entrypoint-initdb.d
内の.sh
,.sql
,.sql.gz
が最初に実行されるので、実行したいファイルがあるwebapp/sql
をdocker-entrypoint-initdb.d
にマウントした。
webapp/sql
に必要なテーブルをcreateするクエリが入っていなかった。予選当日なら本番環境のテーブルを見に行って、真似してクエリ作れば良い。