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
19k
21
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
軽量イメージ時代を 生きるためのAlpine Linux
2016/04/21 Alpine Linux Meetup #1
stormcat24
April 21, 2016
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
5.5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.6k
令和時代のSaaS開発
stormcat24
1
360
History in 5 years of CircleCI and CyberAgent
stormcat24
3
920
Kubernetes Handson Osaka
stormcat24
5
650
Kubernetes Handson
stormcat24
5
4.6k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
400
Base Image Journey 2018
stormcat24
30
140k
kotlin-fest
stormcat24
13
19k
Other Decks in Programming
See All in Programming
VibeCodingからAgenticWorkflowへ
starfish719
0
990
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
130
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
120
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.5k
Hono + Inertia + React で LP を構築した話
oukayuka
2
190
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
570
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
2
1.3k
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
130
業務時間外もAIに働いてもらう話
colorful12
3
9.3k
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
120
リアルな遅延を測る仕様
kota_yata
1
130
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
570
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
880
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
420
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
390
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
490
Product Roadmaps are Hard
iamctodd
55
12k
The SEO Collaboration Effect
kristinabergwall1
1
540
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
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