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
Dockerfileチョットカケルになろう/dockerfile-next-steps
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
aono
October 12, 2024
Programming
69
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dockerfileチョットカケルになろう/dockerfile-next-steps
aono
October 12, 2024
More Decks by aono
See All by aono
RDB(ぽすぐれ)チューニング入門/rdb-tuning-introduction-for-postgresql
awonosuke
0
160
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
8
4.2k
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
15
7.3k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
8.4k
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
110
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
210
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
170
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.9k
Contextとはなにか
chiroruxx
1
380
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
240
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
190
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
Producing Creativity
orderedlist
PRO
348
40k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
400
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Become a Pro
speakerdeck
PRO
31
6k
Thoughts on Productivity
jonyablonski
76
5.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Music & Morning Musume
bryan
47
7.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Cult of Friendly URLs
andyhume
79
6.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Transcript
Dockerfileチョットカケルになろう
目次 1. Docker 2. Dockerfileのおまじない 3. マルチステージビルド 4. RUN --mount=...
5. Dockerのキャッシュ 6. hadolint 7. まとめ 8. 補足
Docker • コンテナ ◦ 軽量性、可搬性が推しらしい ▪ OSや環境に依存せずどんな場所でも同じように動くアプリケーションを作れる ▪ 作ったり壊したりしやすいので破壊的な検証も行いやすい •
ランタイムのアップグレード(Node.js 18.x→20.x)等
Docker • コンテナ化は当たり前 ◦ Docker Compose ◦ Amazon ECS ◦
Cloud Run ◦ k8s(EKS,GKE...)
Docker • Dockerfileはコンテナイメージのレシピ ◦ レシピが良いと誰がどこで作っても良いコンテナが出来上がる ▪ だからDockerfileはこだわっておきたい
Dockerfileのおまじない • # syntax=docker/dockerfile:1 ◦ https://docs.docker.com/reference/dockerfile/#syntax • 新しいお作法を使いまっせ、と宣言 ◦ Docker
BuildKitが有効になってる場合のみ利用できる ▪ Docker BuildKit:Docker 18.09~利用可能
マルチステージビルド • 1つのDockerfileの中に複数のFROM句が存在 ◦ COPY --from=...もマルチステージビルド • 最終的なイメージに必要なリソースだけを詰める ◦ アプリケーションが実行できればOK
▪ コンパイル言語の場合、ビルド済みのバイナリのみ! ◦ 別に最終イメージ用に限らず自由にステージ定義できる ▪ 例)本番、開発環境で同じ依存関係用baseステージ作っておいてCOPY --from=base
RUN --mount=... • 種類(参考) ◦ --mount=type=bind ◦ --mount=type=cache ◦ --mount=type=secret
• --mount=type=bind ◦ ビルドコンテキスト内のリソースをレイヤーに書き込まず利用できる ▪ 例)package*.json、go.{mod,sum}、composer.*等をCOPYしなくて良い • --mount=type=cache ◦ 差分更新だけになるのでコマンド実行が早くなる ▪ RUN --mount=type=cache,target=/root/.npm \ NODE_ENV=production \ npm i ◦ 同じディレクトリであればレイヤーをまたいだキャッシュが使える • --mount=type=secret(参考) ◦ RUNで実行するコマンドで秘匿情報が必要な場合にイメージに書き込まずに注入できる ▪ 例)ビルド時にシークレットキーが必要な場合 ◦ ARG→ENVのパターンを秘匿情報で使わない!
Dockerのキャッシュ • Docker BuildKitのキャッシュ ◦ さっきのRUN --mount=type=cache • Dockerのレイヤーキャッシュ ◦
COPY、RUN等の記述順を変える ◦ マルチステージビルド ◦ ビルドコンテキストに不要なリソースが入らないようにしとく ▪ .dockerignore • .gitignoreとは挙動が違うので注意 • CI/CD上のキャッシュ ◦ GitHub Actionsの場合はgha使っておけばとりあえずOK
ベストプラクティス多くて網羅できない問題...
ベストプラクティス多くて網羅できない問題... ↓ hadolint!
hadolint • Haskell Dockerfile Linter • 使い方 ◦ $ hadolint
path/to/Dockerfile ▪ CI/CDでも導入が簡単 • 良しなにルールを削ったり設定変えれる ◦ チーム開発ではプロジェクトルートに.hadolint.yamlを置いとく ◦ ルールはWikiにまとまってる
まとめ • コンテナ化は当たり前 • Dockerfileの先頭におまじないを入れよう ◦ # syntax=docker/dockerfile:1 • マルチステージビルドを使おう
◦ 1つのDockerfile内にFROMが複数 or COPY --from=... • RUN --mount=...を使おう ◦ --mount=type=bind ◦ --mount=type=cache ◦ --mount=type=secret • Dockerのキャッシュを使おう • hadolintを使おう
参考 • Docker 公式ドキュメント • 2024年版のDockerfileの考え方&書き方 • 2021〜22年頃のDockerfile事情 • Docker
のキャッシュを全力で使いこなそう • Docker BuildKitを理解する
補足 • ADD句の使い道 ◦ リモートからファイルを持ってきたい時 ▪ 例)GitHub等からバイナリを持ってきたい ◦ 持ってくるリソースが圧縮されてたら自動で解凍してくれる
補足 • ADD句の使い道 ◦
補足 • docker-composeじゃなくてdocker compose使おう • COPY --chown使おう