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
5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.4k
令和時代のSaaS開発
stormcat24
1
280
History in 5 years of CircleCI and CyberAgent
stormcat24
3
860
Kubernetes Handson Osaka
stormcat24
5
590
Kubernetes Handson
stormcat24
5
4.3k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
330
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
ニーリーにおけるプロダクトエンジニア
nealle
0
830
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
2.1k
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
1
13k
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
2
800
A2A プロトコルを試してみる
azukiazusa1
2
1.4k
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
120
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
1
18k
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
0
190
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
700
Team operations that are not burdened by SRE
kazatohiei
1
310
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
120
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Agile that works and the tools we love
rasmusluckow
329
21k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Faster Mobile Websites
deanohume
307
31k
Docker and Python
trallard
44
3.5k
It's Worth the Effort
3n
185
28k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Designing Experiences People Love
moore
142
24k
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