Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
BuildKit を使った Scala アプリケーションのテストと高速化 @ Docker M...
Search
i2tsuki
December 26, 2018
Technology
660
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
BuildKit を使った Scala アプリケーションのテストと高速化 @ Docker Meetup Kansai #2
BuildKit を使った Scala アプリケーションのテストと高速化
i2tsuki
December 26, 2018
More Decks by i2tsuki
See All by i2tsuki
「念のためのログ保存」を組織全体でやめるためのポリシーと仕組み作り
i2tsuki
4
380
SRE 視点で事業横断でのオブザーバ ビリティの民主化に取り組んでいる話
i2tsuki
1
580
ソーシャルゲームの長期運用 を目指すための SRE の取り組み - 10 周年を⽬指すコトダマンの場合 -
i2tsuki
5
2.9k
AWS Startup.fm 企業の上場時に必要な監査要件とマネジメントサービスによる解決
i2tsuki
0
150
20180530LINEDeveloperMeetupRedis-redis-for-mackerelio
i2tsuki
0
510
Mackerel's monitoring and checks
i2tsuki
1
7.5k
Mackerel インフラ基盤 AWS 移行の舞台裏
i2tsuki
6
11k
Python Web Application Monitoring in Mackerel
i2tsuki
1
6.3k
Other Decks in Technology
See All in Technology
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
150
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
330
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
120
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
220
2026_devsumi_ozono.pdf
o3
3
510
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
190
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.6k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
310
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
3
610
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
150
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
2.7k
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
Facilitating Awesome Meetings
lara
57
7.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Visualization
eitanlees
152
17k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
280
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Docker and Python
trallard
47
4.2k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
GraphQLとの向き合い方2022年版
quramy
50
15k
Why Our Code Smells
bkeepers
PRO
340
58k
The Spectacular Lies of Maps
axbom
PRO
1
990
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Transcript
BuildKit を使った Scala アプリケーションの テストと高速化 GitHub: @i2tsuki Twitter id:@kizkoh 2018-12-26
Docker Meetup Kansai #2 1 / 15
BuildKit について 須田さんのスライドが参考になる SlideShare - Docker 18.09 新機能 なにが嬉しいのか? マルチステージビルドが並行して実行できる
docker/dockerfile の syntax を使うとキャッシュできる 例) # syntax=docker/dockerfile:1.0-experimental 例) --mount=type=cache,id=ivy2,target=/user/.ivy2/cache 2 / 15
Scala のビルドとテストがめちゃ遅い!! 3 / 15
Scala の CI フロー どこが遅いの?? sbt の Scala の解決 ${HOME}/.sbt
(5 分) ivy2 キャッシュ ${HOME}/.ivy2/cache (40 分) コンパイルキャッシュ ${PROJECT}/target (5 分) 今まではバインドマウントして docker-compose run で実行してた (docker build だけでテスト、ビルドしてコンテナイメージ作りたい!) 4 / 15
とにかくステージを分ける!! & とにかくキャッシュする!! 5 / 15
Docker le buildkit/experimental.md at master · moby/buildkit · GitHub が参考になる!
# Stage app-ivy-setup FROM app-initial as app-ivy-setup RUN --mount=type=cache,id=ivy2,target=/root/.ivy2/cache \ --mount=type=cache,id=sbt,target=/root/.sbt \ sbt compile # Stage: app-test FROM app-ivy-setup as app-test RUN --mount=type=cache,id=ivy2,target=/root/.ivy2/cache \ # sbt は sbt.lock でロックを取得するので sharing=private にする --mount=type=cache,id=sbt,sharing=private,target=/root/.sbt \ sbt "set javaOptions ++= List(\"-Xms512M\", \"-Xmx2048M\", \"-Xss1M\", \"-XX:+C # Stage: app-scalastyle FROM app-ivy-setup as app-scalastyle RUN --mount=type=cache,id=ivy2,target=/root/.ivy2/cache \ # sbt は sbt.lock でロックを取得するので sharing=private にする --mount=type=cache,id=sbt,sharing=private,target=/root/.sbt \ sbt "set javaOptions ++= List(\"-Xms512M\", \"-Xmx2048M\", \"-Xss1M\", \"-XX:+C 6 / 15
テストをどうするか(DB, KVS との接続)問題 7 / 15
BuildKit の問題 docker-compose 今までは docker-compose を使ってテストしていた docker-compose は BuildKit 対応中
8 / 15
BuildKit の問題 BuildKit のネットワークモード BuildKit のネットワークモードは Host or default or
none moby/builder.go at master · moby/moby 他のコンテナにアタッチできない & network を利用できない docker build --network=container:xxxxxxxxxxxx -t mackerel できない 9 / 15
どうするか 10 / 15
BuildKit でテストをする ホストのネットワークモードを使う DB, KVS は docker-compose で作成する DB, KVS
はホストネットワークモードで立てると他の CI ジョブと競合 DB, KVS はブリッジモードで作成する DB, KVS の IP は docker inspect で取ってくる 例) DB=$(docker inspect ${DOCKER_COMPOSE_PROJECT}_db_1) 11 / 15
docker-compose.yml services: pause: image: gcr.io/google_containers/pause-amd64:3.1 networks: mackerel depends_on: - db
- redis db: image: postgres:9.6-alpine ports: - "5432" networks: mackerel redis: image: redis:2.8.17 ports: - "6379" networks: mackerel depends を解決したいのでメインのコンテナに pause コンテナ を立てている 12 / 15
BuildKit でテストをする ホストのネットワークモードを使う docker inspect を使って DB, KVS の IP
を取ってくる --add-host を使ってホスト名を解決する Tips: --add-host の IP の変更はレイヤキャッシュに影響しない docker-compose -f docker-compose.yml -p "${DOCKER_COMPOSE_PROJECT}" up -d DB=$(docker inspect ${DOCKER_COMPOSE_PROJECT}_db_1 --format "{{json .NetworkSetting REDIS=$(docker inspect ${DOCKER_COMPOSE_PROJECT}_redis1_1 --format "{{json .Networ docker build --pull \ --add-host db:${DB} \ --add-host redis:${REDIS} \ --network=host \ . 13 / 15
結局どれくらい早くなったのか 早くなった (12 分 -> 7 分) キャッシュがあればそこそこ早かった(docker run のバインドマウント)
Scala のコンパイル結果をキャッシュするようになった (target) 通常のテストと Style のテストをマルチステージビルド化で平行実行 何がまだ遅いのか テストが 6 分くらいかかっていて全体を占めている 一番うれしいこと レイヤキャッシュを使って本番のビルドをスキップできる 14 / 15
おわり 15 / 15