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
350
気をつけたい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
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
290
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
420
CIで使うClaude
iwatatomoya
0
290
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
340
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
160
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
420
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
1
150
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.7k
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
930
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
240
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
RailsConf 2023
tenderlove
30
1.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Mind Mapping
helmedeiros
PRO
1
280
Into the Great Unknown - MozCon
thekraken
41
2.6k
How GitHub (no longer) Works
holman
316
150k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Ruling the World: When Life Gets Gamed
codingconduct
0
280
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
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ΛٻΊΔཱྀଓ͘… ·ͱΊ