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
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
250
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
11
9k
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
1
140
NANDでも描画したい!
nichica906
3
810
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
360
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
0
180
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
150
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
830
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
360
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
220
Believing is Seeing
oripsolob
1
200
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
The Cost Of JavaScript in 2023
addyosmani
55
10k
Marketing to machines
jonoalderson
1
5.7k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
The World Runs on Bad Software
bkeepers
PRO
72
12k
Why Our Code Smells
bkeepers
PRO
340
58k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
Test your architecture with Archunit
thirion
2
2.4k
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ΛٻΊΔཱྀଓ͘… ·ͱΊ