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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
aono
October 12, 2024
Programming
78
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
200
Other Decks in Programming
See All in Programming
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
210
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
120
Oxlintはいいぞ(続)
yug1224
1
500
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
550
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
280
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
180
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
190
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
170
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
250
React本体のコードリーディング
high_g_engineer
1
160
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
480
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
ラッコキーワード サービス紹介資料
rakko
1
4.6M
Prompt Engineering for Job Search
mfonobong
0
430
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
230
Speed Design
sergeychernyshev
33
2.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Navigating Team Friction
lara
192
16k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Code Reviewing Like a Champion
maltzj
528
40k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
490
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使おう