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
Improve Docker Image by BuildKit
Search
go_vargo
July 05, 2019
Technology
1.7k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Improve Docker Image by BuildKit
go_vargo
July 05, 2019
More Decks by go_vargo
See All by go_vargo
Kubernetes Internal #9 - Minikube
govargo
0
360
気をつけたいKubernetesとの付き合い方 / Happy Kubernetes Life
govargo
6
3k
[CNDT2020]Linux Observability with BPF Performance Tools
govargo
15
3.7k
Admission Webhookで快適なSecret管理 / Berglas Secret Admission Webhook
govargo
5
3.8k
[CNDK2019]Production Ready Kubernetesに必要な15のこと / Production Ready Kubernetes 15 Rules
govargo
38
16k
ゼロから始めるKubernetes Controller / Under the Kubernetes Controller
govargo
40
16k
Inside of Kubernetes Controller
govargo
20
12k
コロプラが実践しているSpinnakerを用いたデプロイ戦略 / Deploy Strategy with Spinnaker at Colopl
govargo
6
5.1k
Debugging for MicroService on Kubernetes
govargo
2
820
Other Decks in Technology
See All in Technology
仕様駆動開発、導入半年。「本当に速くなってるの?」にデータで答える / AICon2026_hirakawa
rakus_dev
0
310
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
750
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
410
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
1
140
ダッシュボード"開発"について 〜使われるダッシュボードのつくりかた〜
kimichan
0
190
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
110
AI工学特論: MLOps・継続的評価
asei
4
880
Kaggleで成長するために意識したこと
prgckwb
2
440
変更し続けられるシステムをどう保つか — AI時代のSSoTという設計原則
kawauso
1
1k
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
510
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
2
530
インシデント事例と パッケージの全量解析に学ぶ ソフトウェアサプライチェーンの守り方 / supply-chain-attack-defense
flatt_security
0
880
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
Visualization
eitanlees
152
17k
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Balancing Empowerment & Direction
lara
6
1.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The browser strikes back
jonoalderson
0
1.4k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Art, The Web, and Tiny UX
lynnandtonic
304
22k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
GraphQLとの向き合い方2022年版
quramy
50
15k
Transcript
৬ͷDockerϏϧυ Λվળͨ͠ 1
ࣗݾհ ໊લ: ү ݡେ(@go_vargo) ॴଐ: גࣜձࣾίϩϓϥ ɹɹ Πϯϑϥάϧʔϓ ୈ2νʔϜ झຯ:
ΫϥυωΠςΟϒܥͷMeetupͷࢀՃ ࠷ۙͷΈɺίϯςφϫʔΫϩʔυͷҋͷ ཱ͔͍ͪํ 2
ࠓͷςʔϚ ৬ͷDockerΠϝʔδɾϏϧυΛվળͨ͠ γνϡΤʔγϣϯ: ɾνʔϜʹ͢ͰʹDockerfile͕͋Δ (ڥຖʹDockerfile͕ଘࡏ͢Δ) ɾΠϝʔδαΠζνϡʔχϯάͷ༨ͳ͠ ɾݴޠPHP(Laravel) ɾCI/CDΛͬͯϏϧυˠσϓϩΠ͍ͯ͠Δ ɾϩʔΧϧ։ൃDocker Compose
ϦϞʔτKubernetes(GKE) 3
ςʔϚʹࢸͬͨϞνϕʔγϣϯ ࠷ߴͷDockerfileΛ࡞Γ͍ͨ… ɾDockerfileͷϕετϓϥΫςΟεɾΞϯνύλʔϯ ݻ·Γͭͭ͋Δ…͕࣍ͷهࣄΛಡΜͰɺࠓΑΓ ͬͱDockerϏϧυΛվળͰ͖ͦ͏ͩͱࢥͬͨ ʮDockerfileΛվળ͢ΔͨΊͷBest Practice 2019൛ʯ https://www.slideshare.net/zembutsu/dockerfile-bestpractices-19-and-advice ɾڥ͝ͱʹෳ͋ΔDockerfileʹΑͬͯ
Infrastructure as Codeͱͯ͠ͷՄಡੑ͕མ͍ͪͯͨɻ ूͯ͠ɺগ͠ͰίϯςφͷҋΛΒ͍ͨ͠ 4
5 ڥུ֓ 3FHJTUSZ ,VCFSOFUFT 4QJOOBLFS (JU-BC 3VOOFS *NBHF#VJME 1VTI *NBHF#BLF
%FQMPZ
6 ࠓ͢ͱ͜Ζ 3FHJTUSZ ,VCFSOFUFT 4QJOOBLFS (JU-BC 3VOOFS *NBHF#VJME 1VTI *NBHF#BLF
%FQMPZ
ᶃ BuildKitΛ༗ޮԽ ᶄ ڥ(ϩʔΧϧ, ։ൃڥ,etc…)͝ͱͷDockerfileΛ ҰͭͷDockerfileʹ·ͱΊͯɺεςʔδͰ ڥ͝ͱͷࠩΛఆٛ ᶅ ηΩϡϦςΟੑͷ্ͱͯ͠ɺίϯςφ͔Β ෆཁͳSecretϑΝΠϧͷআڈ(ࠓճলུ)
7 վળͨ͜͠ͱ
ͷલʹɺڥมΛ༗ޮԽ͢Δ͚ͩ 8 ᶃ BuildKitͷ༗ޮԽ docker build DOCKER_BUILDKIT=1 docker build …
9 ᶄ ڥࠩΛεςʔδԽ मਖ਼લ मਖ਼ޙ Dockerfile.local Debugger Git Vim …
Dockerfile.k8s FROM image AS local …. FROM image AS local debug …. FROM image AS k8s …. FROM image AS k8s-XXXX …. ҰͭͷϑΝΠϧʹू͢Δ͜ͱͰɺ ίʔυͷڞ௨ԽͱՄಡੑΛߴΊΔ Dockerfile.xxxx …
ޮೳᶃ: ༨ܭͳϨΠϠʔΛؚΊͳ͍ͨΊΠϝʔδαΠζݮগ‑ ※ BuildKitҎલ͔Βͷޮೳ ޮೳᶄ: Ϗϧυ࣌ؒͷॖ 10 Ϛϧνεςʔδ × BuildKit
Dockerfile ্͔ΒԼʹϏϧυ Dockerfile Stage1 Stage2 ฒྻϏϧυ BuildKitͳ͠ BuildKit͋Γ
11 मਖ਼લ FROM php:7.2.18-alpine COPY docker/files / COPY composer.json composer.lock
/app/ RUN cd /app \ && apk add --no-cache --virtual .build-deps zip unzip git \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer \ && composer global require hirak/prestissimo \ && composer install --prefer-dist --no-interaction --no-scripts --no-autoloader --no-dev \ && chown -R www-data:www-data vendor \ && find vendor/ -type d -name ‘.git’ -print0 | xargs -0 rm -rf \ && apk del .build-deps \ && composer global remove hirak/prestissimo \ && rm -rf /root/.composer/ COPY --chown=www-data:www-data . /app WORKDIR /app CMD [“run”] ᶄ ڥࠩΛεςʔδԽ ىಈεΫϦϓτΛίϐʔ ύοέʔδཧͷϑΝΠϧΛίϐʔ ϥΠϒϥϦύοέʔδཧπʔϧΛΠϯετʔϧ ιʔείʔυΛίϐʔ
12 ##### ComposerΠϯετʔϧ༻ ##### FROM php:7.2.18-alpine AS builder COPY composer.json
composer.lock /app/ WORKDIR /app RUN cd /app \ && apk add --no-cache --virtual .build-deps zip unzip git \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer \ && composer global require hirak/prestissimo \ && composer install --prefer-dist --no-interaction --no-scripts --no-autoloader —no-dev ##### Kubernetes༻Πϝʔδ ##### FROM php:7.2.18-alpine AS k8s COPY docker/files / WORKDIR /app COPY --chown=www-data:www-data . /app/ COPY --from= builder /usr/local/bin/composer /usr/local/bin/composer RUN apk add —no-cache zip unzip COPY --from=builder --chown=www-data:www-data /app/vendor /app/vendor CMD [“run”] मਖ਼ޙ - v1 ىಈεΫϦϓτΛίϐʔ ύοέʔδཧͷϑΝΠϧΛίϐʔ ύοέʔδΛΠϯετʔϧ ՌΛίϐʔ ύοέʔδϚωʔδϟΛίϐʔ
13 ##### ComposerΠϯετʔϧ༻ ##### FROM php:7.2.18-alpine AS builder COPY composer.json
composer.lock /app/ WORKDIR /app RUN cd /app \ && apk add --no-cache --virtual .build-deps zip unzip git \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer \ && composer global require hirak/prestissimo \ && composer install --prefer-dist --no-interaction --no-scripts --no-autoloader —no-dev ##### Kubernetes༻Πϝʔδ ##### FROM php:7.2.18-alpine AS k8s COPY docker/files / WORKDIR /app COPY --chown=www-data:www-data . /app/ COPY --from= builder /usr/local/bin/composer /usr/local/bin/composer RUN apk add —no-cache zip unzip COPY --from=builder --chown=www-data:www-data /app/vendor /app/vendor CMD [“run”] मਖ਼ޙ - v1 ‑ύοέʔδϚωʔδϟͷΠϯετʔϧຖճ࣮ߦ͢Δඞཁͳ͠
14 ##### ComposerΠϯετʔϧ༻ ##### FROM composer:1.8.6 AS builder COPY composer.json
composer.lock /app/ WORKDIR /app RUN composer global require hirak/prestissimo \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer \ && composer install --prefer-dist --no-interaction --no-scripts --no-autoloader --no-dev \ && chown -R www-data:www-data vendor \ && find vendor/ -type d -name ‘.git’ -print0 | xargs -0 rm -rf ##### Kubernetes༻Πϝʔδ ##### FROM php:7.2.18-alpine AS k8s COPY docker/files / WORKDIR /app COPY --chown=www-data:www-data . /app/ COPY --from=builder /usr/local/bin/composer /usr/local/bin/composer RUN apk add —no-cache zip unzip COPY --from=builder --chown=www-data:www-data /app/vendor /app/vendor CMD [“run”] मਖ਼ޙ - v2 ผͷΠϝʔδͱͯ͠Γग़͢ Πϯετʔϧ෦আ
15 ##### ComposerΠϯετʔϧ༻ ##### FROM composer:1.8.6 AS builder COPY composer.json
composer.lock /app/ WORKDIR /app RUN composer global require hirak/prestissimo \ && composer install --prefer-dist --no-interaction --no-scripts --no-autoloader --no-dev \ && chown -R www-data:www-data vendor \ && find vendor/ -type d -name ‘.git’ -print0 | xargs -0 rm -rf ##### Kubernetes༻Πϝʔδ ##### FROM php:7.2.18-alpine AS k8s COPY docker/files / WORKDIR /app COPY --chown=www-data:www-data . /app/ COPY --from=builder /usr/local/bin/composer /usr/local/bin/composer RUN apk add —no-cache zip unzip COPY --from=builder --chown=www-data:www-data /app/vendor /app/vendor CMD [“run”] मਖ਼ޙ - v2 builderͷͪ߹Θ͕ͤൃੜ
16 ##### Composerίϐʔ༻ ##### FROM composer:1.8.6 AS copy ##### ComposerΠϯετʔϧ༻
##### FROM composer:1.8.6 AS builder COPY composer.json composer.lock /app/ WORKDIR /app RUN composer global require hirak/prestissimo \ && composer install --prefer-dist --no-interaction --no-scripts --no-autoloader --no-dev \ && chown -R www-data:www-data vendor \ && find vendor/ -type d -name ‘.git’ -print0 | xargs -0 rm -rf ##### Kubernetes༻Πϝʔδ ##### FROM php:7.2.18-alpine AS k8s COPY docker/files / WORKDIR /app COPY --chown=www-data:www-data . /app/ COPY --from=copy /usr/local/bin/composer /usr/local/bin/composer RUN apk add —no-cache zip unzip COPY --from=builder --chown=www-data:www-data /app/vendor /app/vendor मਖ਼ޙ - v3 ͪ߹ΘͤΛճආ ͪ͜͜߹Θͤ
17 BuildKitʹΑΔฒྻϏϧυ 0 1 2 3 Stage0, 1ฒྻ࣮ߦ Stage20,1ͷྃͪ Stage32ͷྃͪ
18 BuildKitʹΑΔฒྻϏϧυ 0 1 2 3 εςʔδؒͷґଘ͕ؔͳ͍ ࣮ߦ࣌ؒΛॖ͢Δʹ… ཧ 0
1 2 3 εςʔδؒͷґଘ͕ؔগͳ͍ ࣍ળ
19 BuildKitʹΑΔฒྻϏϧυ ͍͔ʹαΠζΛখ͘͢͞Δ͔… ͍͔ʹϨΠϠʔΛগͳ͘͢Δ͔… BuildKitΛಋೖ͢ΔͱΈมԽ͢Δ ͍͔ʹґଘ͕ؔͳ͍ΠϝʔδΛઃܭ͢Δ͔… ಋೖޙ ಋೖલ ͍͔ʹεςʔδΛׂ͢Δ͔…
20 վળ݁Ռ ϩʔΧϧ༻Πϝʔδ मਖ਼લ मਖ਼ޙ αΠζ 357MB 355MB Ϗϧυ࣌ؒ(1ճ) 88s
41s Ϗϧυ࣌ؒ(2ճҎ߱) 12s 2s K8s༻Πϝʔδ मਖ਼લ मਖ਼ޙ αΠζ 209MB 209MB Ϗϧυ࣌ؒ(1ճ) 78s 41s Ϗϧυ࣌ؒ(2ճҎ߱) 16s 2s
21 • BuildKit × ϚϧνεςʔδͰDockerfileڥΛඋͰ͖ͨ • BuildKitΛ͏͜ͱͷϝϦοτΛײ͡Δ͕ɺ σϝϦοτײ͡ͳ͍(͋͘·Ͱݸਓతʹ) • ڧ͍ͯݴ͑ɺͨͩͰ͑͞৬ਓܳʹ͍ۙDockerϏϧυ͕
ɹΑΓ͘͠ͳ͍ͬͯΔ(ܳʹͳ͍ͬͯΔ)͔͠Εͳ͍ • ࠷ߴͷDockerfileΛٻΊΔཱྀଓ͘… ·ͱΊ