開発中にattachでいろいろやるときは、慣れたubuntuが良かったけど、最近は大きくいじることもなくなったので、軽さ重視でalpineに変更してみたところ、細かいけど幾つか問題があった
問題
ホスト名が使えなくなった
ウェブサーバーからredisサーバーにつなげる際、ホスト側の/etc/hostsで指定しているホスト名を使っていたけど、alpineにしてから使えなくなった。
IPに変更したら問題なかった。
本番環境(GKE)ではそもそもIPなので問題なし。
cythonが入らなかった
API用のフレームワークfalconに必要なcythonが下記のようなエラーが出てビルドできなかった。
Step 3 : RUN pip3 install --upgrade -q cython falcon gunicorn bigquery-python google-api-python-client cerberus redis user-agents ---> Running in 2fe69e75b707 Command "/usr/local/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-sdk00hrc/cython/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-773lkfk3-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-sdk00hrc/cython/ The command '/bin/sh -c pip3 install --upgrade -q cython falcon gunicorn bigquery-python google-api-python-client cerberus redis user-agents' returned a non-zero code: 1
検索したら下記のようなnumpyでコケてる問題があったので一部を拝借
Dockerfileに下記を追加したら無事インストールできた。
RUN apk add --force --update build-base
bashなど普段使ってるコマンドが使えない
alpineにはbashが入っていないので、起動中のコンテナに入って、コマンド操作するdocker exec -it {imageID} bashなどが使えない。
その他にもいろいろと普段debianやubuntuなどで使っているコマンドが使えない。
代わりにshを使う。
ファイルの確認ぐらいだったらshやcatで問題無いと思うので、そもそもイメージの中に入っていろいろする段階なら、debian系のままで進めて、必要なくなってからalpineに移行した方がいいと思う。
良かったこと
イメージサイズの大幅削減
Ubuntu:16.04で作ったイメージは214.7 MBだったけど、python:3.5-alpineを元にしたものは、32.9MBとなり、約85%サイズが小さくなった。
ディスク使用量が減らせるだけでなく、GCPへのアップロードも高速になって開発スピードもアップした。
使用メモリの削減
Google Container Engine上で、kubectl top podで見られるメモリ使用量が54MB前後から27MB前後と約半分になったものもあった。
複数台起動しているウェブサーバーでは、43MBから39MBと1割程度。
動いてるプロセスにもよるけど、メモリもここまで減るとは思わなかった。
before
% kc top pod NAME CPU(cores) MEMORY(bytes) arms-2550130212-o7hsv 22m 43Mi arms-2550130212-8l016 22m 43Mi arms-2550130212-5cebl 21m 43Mi
after
% kc top pod (git)-[master] NAME CPU(cores) MEMORY(bytes) arms-3073894556-ebjj7 25m 39Mi arms-3073894556-xl6xx 24m 39Mi arms-3073894556-yw5c7 23m 38Mi
まだ、本番運用を始めたばかりなので、何か起こるかもしれないけど、やる価値は十分あると思う。
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る
- 作者: 吉岡恒夫,paiza
- 出版社/メーカー: マイナビ出版
- 発売日: 2016/05/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る