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.8k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.3k
令和時代のSaaS開発
stormcat24
1
260
History in 5 years of CircleCI and CyberAgent
stormcat24
3
830
Kubernetes Handson Osaka
stormcat24
5
560
Kubernetes Handson
stormcat24
5
4.3k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
300
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
17k
Other Decks in Programming
See All in Programming
CI改善もDatadogとともに
taumu
0
200
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
7
4.2k
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
670
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
200
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
220
SwiftUI Viewの責務分離
elmetal
PRO
2
270
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
300
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
150
AIプログラミング雑キャッチアップ
yuheinakasaka
17
4.2k
color-scheme: light dark; を完全に理解する
uhyo
7
490
PEPCは何を変えようとしていたのか
ken7253
2
190
Domain-Driven Transformation
hschwentner
2
1.9k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1368
200k
Music & Morning Musume
bryan
46
6.4k
Practical Orchestrator
shlominoach
186
10k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Code Review Best Practice
trishagee
67
18k
Embracing the Ebb and Flow
colly
84
4.6k
Optimizing for Happiness
mojombo
376
70k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Bash Introduction
62gerente
611
210k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
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