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
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
240
サイバー捜査員研修(前半)
nomizone
1
2k
PLATEAU で バーチャル花火大会
tatsuya1970
0
150
ラジオの科学
frievea
0
310
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
260
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
230
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
2
790
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
170
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
150
LanceDB入門
mocobeta
7
490
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
380
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
200
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
Scaling GitHub
holman
464
140k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Darren the Foodie - Storyboard
khoart
PRO
3
3.6k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
520
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Google's AI Overviews - The New Search
badams
0
1.1k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Faster Mobile Websites
deanohume
310
32k
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ΛٻΊΔཱྀଓ͘… ·ͱΊ