Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
軽量イメージ時代を 生きるためのAlpine Linux
Search
stormcat24
April 21, 2016
Programming
21
18k
軽量イメージ時代を 生きるためのAlpine Linux
2016/04/21 Alpine Linux Meetup #1
stormcat24
April 21, 2016
Tweet
Share
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
4.6k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.2k
令和時代のSaaS開発
stormcat24
1
240
History in 5 years of CircleCI and CyberAgent
stormcat24
3
810
Kubernetes Handson Osaka
stormcat24
5
540
Kubernetes Handson
stormcat24
5
4.2k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
290
Base Image Journey 2018
stormcat24
29
130k
kotlin-fest
stormcat24
13
17k
Other Decks in Programming
See All in Programming
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
110
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
110
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
140
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
930
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
120
Jakarta EE meets AI
ivargrimstad
0
120
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
230
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Code Review Best Practice
trishagee
64
17k
Building Your Own Lightsaber
phodgson
103
6.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Docker and Python
trallard
40
3.1k
Transcript
軽量イメージ時代を 生きるためのAlpine Linux 20160421 Alpine Linux Meetup #1 @stormcat24
‣ @stormcat24 ‣ Akinori Yamada ‣ CyberAgent, Inc. ‣ Technical
Engineer ‣ DevOps ‣ http://blog.stormcat.io ‣ FRESH!
Alpineだけじゃなく Dockerネタも多いです
-動機-
None
既にかなり置き換えてる
None
None
None
DockerHub現状 ‣ オフィシャルの有名どころは着々とAlpineベース に置き換えられている ‣ タグは -alpine をつけて他のディストリビューショ ンと差別化している ‣
非オフィシャルでも進んでいる。-alpine無しで alpineなものもある(Dockerfileとサイズで判断)
Alpineが選ばれる理由 ‣ めっちゃ小さい ‣ ISOで83MB ‣ 公式Dockerイメージ2MB ‣ イメージは小さければ小さいほど価値を持つ ‣
docker pull/push, Deploy時間短縮 ‣ オートスケールでの迅速なサービスイン
非Alpineなら ‣ centos/debian/ubuntuベース ‣ 慣れ親しんだパッケージマネージャ(yum/apt) ‣ 大きくなりがち ‣ scratchベース ‣
amazon/amazon-ecs-agent(9MB) ‣ 扱いは難しい
Alpine Linuxは Docker界の新機軸
その割には、我々は あまりにも Alpineを知らない
開催決定
-とりあえず触ってみる-
さくっと環境構築 ‣ VagrantでVirtualBoxにVM立てるのが楽 ‣ vagrant init maier/alpine-3.3.1-x86_64 ‣ vagrant up
‣ vagrant ssh
単一バイナリ ‣ 基本プログラムは、/bin/busybox(単一バイナ リ)へのシンボリックリンク ‣ 単一のバイナリに複数アプリケーションが含まれて いる ‣ 例)ls -l
は、事実上の /bin/busybox ls -l
bashなど無い ‣ デフォルトシェルはash(組み込み系で有名) ‣ bashはプリインストールされていない ‣ bashが必要ならapk(Alpineのパッケージマネー ジャ)でインストールすると良い
apk ‣ Alpineのパッケージマネージメントシステム ‣ ある程度有名所は揃うが、バージョンが新鮮とは限 らない ‣ 欲しいバージョンはビルドする必要性
新鮮でない例(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有り
apk 基本コマンド ‣ apk update ‣ apk add ‣ apk
del
apk update ‣ リモートapkリポジトリから、最新のインデックス に更新する ‣ yum update/apt-get update みたいなもの
apk add ‣ パッケージを追加するコマンド ‣ 1回で複数パッケージ指定可能 ‣ apk add bash
zsh ‣ バージョン指定、範囲指定 ‣ apk add ruby=2.2.4-r0 ‣ apk add 'nginx<1.8.2'
apk add —virtual ‣ パッケージ群をひとまとめにして、別名をつける ‣ apk add --virtual=build-dependencies build-
base perl-dev ‣ ビルドには必要だが、実行には不要な産業廃棄物を 後からまとめて削除しやすい
apk del ‣ パッケージを削除するコマンド ‣ apk del ruby-dev ‣ —virtualで別名を定義していれば、別名に定義さ
れたパッケージを一括で削除できる ‣ apk del build-dependencies
Alpine本番運用した話
█████FRESH! ‣ 動画配信プラットフォーム ‣ Amazon EC2 Container Service(ECS) ‣ Microservices
‣ Nginx/Go/Node/HAProxyコンテナ等 ‣ UbuntuベースからAlpineベースに移行 ‣ 今のところ特に問題なし
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が必要になってイメージがデブる
Nginx軽量化 ‣ Alpineに変更 ‣ HttpPerlModuleをやめた ‣ entrykitを導入
entrykit ‣ github.com/progrium/entrykit ‣ docker runのタイミングで、設定ファイルのテン プレートに環境変数を埋め込んでレンダリングする 仕組み
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
Alpine化と モジュールの省力化は セットでやるのが重要
glibc問題 ‣ 素のAlpineイメージにはglibcがありません ‣ CircleCI(Ubuntuベース)でビルドしたGoのバイ ナリをAlpineイメージにコピーして動かないとか で消耗する ‣ frolvlad/alpine-glibc とかあります
ダイエット結果 ‣ Nginx: 20MB ‣ Go: 40-60MB ‣ Node: 45MB(アプリ入れると200MB。アプリの
ダイエットの余地あり) ‣ HAProxy: 10MB
-まとめ-
言いたかったこと ‣ apkが扱えるようになれば、Alpine Linuxは難しく はありません ‣ Alpine化は軽量化の入り口にすぎない ‣ モジュールを省いたりして、シンプルなイメージに 保つことが重要
‣ まあアルパインって名前がかわいいですよね
Thank you