Upgrade to Pro — share decks privately, control downloads, hide ads and more …

軽量イメージ時代を 生きるためのAlpine Linux

軽量イメージ時代を 生きるためのAlpine Linux

2016/04/21 Alpine Linux Meetup #1

0aac627116c6e2a87b9ae179500801df?s=128

stormcat24

April 21, 2016
Tweet

Transcript

  1. 軽量イメージ時代を 生きるためのAlpine Linux 20160421 Alpine Linux Meetup #1 @stormcat24

  2. ‣ @stormcat24 ‣ Akinori Yamada ‣ CyberAgent, Inc. ‣ Technical

    Engineer ‣ DevOps ‣ http://blog.stormcat.io ‣ ‭‭‭‭‭FRESH!
  3. Alpineだけじゃなく Dockerネタも多いです

  4. -動機-

  5. None
  6. 既にかなり置き換えてる

  7. None
  8. None
  9. None
  10. DockerHub現状 ‣ オフィシャルの有名どころは着々とAlpineベース に置き換えられている ‣ タグは -alpine をつけて他のディストリビューショ ンと差別化している ‣

    非オフィシャルでも進んでいる。-alpine無しで alpineなものもある(Dockerfileとサイズで判断)
  11. Alpineが選ばれる理由 ‣ めっちゃ小さい ‣ ISOで83MB ‣ 公式Dockerイメージ2MB ‣ イメージは小さければ小さいほど価値を持つ ‣

    docker pull/push, Deploy時間短縮 ‣ オートスケールでの迅速なサービスイン
  12. 非Alpineなら ‣ centos/debian/ubuntuベース ‣ 慣れ親しんだパッケージマネージャ(yum/apt) ‣ 大きくなりがち ‣ scratchベース ‣

    amazon/amazon-ecs-agent(9MB) ‣ 扱いは難しい
  13. Alpine Linuxは Docker界の新機軸

  14. その割には、我々は   あまりにも   Alpineを知らない

  15. 開催決定

  16. -とりあえず触ってみる-

  17. さくっと環境構築 ‣ VagrantでVirtualBoxにVM立てるのが楽 ‣ vagrant init maier/alpine-3.3.1-x86_64 ‣ vagrant up

    ‣ vagrant ssh
  18. 単一バイナリ ‣ 基本プログラムは、/bin/busybox(単一バイナ リ)へのシンボリックリンク ‣ 単一のバイナリに複数アプリケーションが含まれて いる ‣ 例)ls -l

    は、事実上の /bin/busybox ls -l
  19. bashなど無い ‣ デフォルトシェルはash(組み込み系で有名) ‣ bashはプリインストールされていない ‣ bashが必要ならapk(Alpineのパッケージマネー ジャ)でインストールすると良い

  20. apk ‣ Alpineのパッケージマネージメントシステム ‣ ある程度有名所は揃うが、バージョンが新鮮とは限 らない ‣ 欲しいバージョンはビルドする必要性

  21. 新鮮でない例(Nginx) $ apk search nginx nginx-1.8.1-r0 collectd-nginx-5.5.0-r1 nginx-lua-1.8.0-r5 nginx-lua-doc-1.8.0-r5 nginx-vim-1.8.1-r0

    ※Alpine v3.3での結果。edgeでは1.9.14有り
  22. apk 基本コマンド ‣ apk update ‣ apk add ‣ apk

    del
  23. apk update ‣ リモートapkリポジトリから、最新のインデックス に更新する ‣ yum update/apt-get update みたいなもの

  24. apk add ‣ パッケージを追加するコマンド ‣ 1回で複数パッケージ指定可能 ‣ apk add bash

    zsh ‣ バージョン指定、範囲指定 ‣ apk add ruby=2.2.4-r0 ‣ apk add 'nginx<1.8.2'
  25. apk add —virtual ‣ パッケージ群をひとまとめにして、別名をつける ‣ apk add --virtual=build-dependencies build-

    base perl-dev ‣ ビルドには必要だが、実行には不要な産業廃棄物を 後からまとめて削除しやすい
  26. apk del ‣ パッケージを削除するコマンド ‣ apk del ruby-dev ‣ —virtualで別名を定義していれば、別名に定義さ

    れたパッケージを一括で削除できる ‣ apk del build-dependencies
  27. Alpine本番運用した話

  28. █████FRESH! ‣ 動画配信プラットフォーム ‣ Amazon EC2 Container Service(ECS) ‣ Microservices

    ‣ Nginx/Go/Node/HAProxyコンテナ等 ‣ UbuntuベースからAlpineベースに移行 ‣ 今のところ特に問題なし
  29. Nginx(Ubuntu時代) ‣ confに環境変数埋め込むために、 HttpPerlModule利用 env SERVER_NAME; http { perl_set $env_server_name

    'sub { return $ENV{“SERVER_NAME"}; }'; } server { listen 80; server_name $env_server_name; charset utf-8; # hogehoge } ※perlが必要になってイメージがデブる
  30. Nginx軽量化 ‣ Alpineに変更 ‣ HttpPerlModuleをやめた ‣ entrykitを導入

  31. entrykit ‣ github.com/progrium/entrykit ‣ docker runのタイミングで、設定ファイルのテン プレートに環境変数を埋め込んでレンダリングする 仕組み

  32. entrykit使用 server { listen 80; server_name {{ var “SERVER_NAME" |

    default “www.example.com” }}; charset utf-8; # hogehoge } ※これはテンプレ nginx.conf.tmpl server { listen 80; server_name www.example.com; charset utf-8; # hogehoge } ※runしたときの完成形 nginx.conf
  33. Alpine化と モジュールの省力化は セットでやるのが重要

  34. glibc問題 ‣ 素のAlpineイメージにはglibcがありません ‣ CircleCI(Ubuntuベース)でビルドしたGoのバイ ナリをAlpineイメージにコピーして動かないとか で消耗する ‣ frolvlad/alpine-glibc とかあります

  35. ダイエット結果 ‣ Nginx: 20MB ‣ Go: 40-60MB ‣ Node: 45MB(アプリ入れると200MB。アプリの

    ダイエットの余地あり) ‣ HAProxy: 10MB
  36. -まとめ-

  37. 言いたかったこと ‣ apkが扱えるようになれば、Alpine Linuxは難しく はありません ‣ Alpine化は軽量化の入り口にすぎない ‣ モジュールを省いたりして、シンプルなイメージに 保つことが重要

    ‣ まあアルパインって名前がかわいいですよね 
  38. Thank you