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
GradleでビルドしてDockerで配布する
Search
Hidetake Iwata
December 19, 2014
Technology
0
840
GradleでビルドしてDockerで配布する
JGGUG大忘年会LT大会と、LondonのG*なカンファレンス行ってきた報告!+合宿の報告もあるよ!
https://jggug.doorkeeper.jp/events/17692
Hidetake Iwata
December 19, 2014
Tweet
Share
More Decks by Hidetake Iwata
See All by Hidetake Iwata
Rewrite Go error handling using AST transformation
int128
1
1.3k
Cluster AutoscalerをTerraformとHelmfileでデプロイしてPrometheusでモニタリングする / Deploy the Cluster Autoscaler with Terraform and Helmfile, Monitor with Prometheus
int128
3
1.7k
認証の仕組みとclient-go credential plugin / authentication and client-go credential plugin
int128
7
7.5k
CLIでOAuth/OIDCを快適に利用する
int128
0
870
AppEngine × Spring Boot × Kotlin
int128
0
110
いつものJIRA設定
int128
1
180
Swaggerのテンプレートを魔改造した話 / Customize Swagger Templates
int128
1
4.8k
本番環境のリリースを自動化した話
int128
0
760
Swagger × Spring Cloud
int128
0
99
Other Decks in Technology
See All in Technology
産業機械をElixirで制御する
kikuyuta
0
130
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
2k
Data Hubグループ 紹介資料
sansan33
PRO
0
1.8k
Text-to-SQLの評価データセットを作って最新LLMモデルの性能評価をしてみた
gotalab555
3
730
Devin(Deep) Wiki/Searchの活用で変わる開発の世界観/devin-wiki-search-impact
tomoki10
0
170
20250612_GitHubを使いこなすためにソニーの開発現場が取り組んでいるプラクティス.pdf
osakiy8
1
540
從開發到架構設計的可觀測性實踐
philipz
0
210
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3.4k
Tenstorrent 開発者プログラム
tenstorrent_japan
0
280
Kafka vs. Pulsar: Performance Evaluation by Petabyte-Scale Streaming Platform Providers
lycorptech_jp
PRO
1
350
Nonaka Sensei
kawaguti
PRO
3
540
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
1
190
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
24
1.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
The Cost Of JavaScript in 2023
addyosmani
50
8.3k
Done Done
chrislema
184
16k
A better future with KSS
kneath
239
17k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
470
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Transcript
Gradleでビルドして Dockerで配布する JGGUG LT 2014.12.19 @int128
@int128 https://github.com/int128
Gradle SSH Pluginの作者です https://gradle-ssh-plugin.github.io
アプリケーションの 提供と利用 について考える
リリース手順.xls この端末のEclipseで ビルドしたJARを 設定ファイルと一緒に ZIPで固めて ポータルサイトに アップしておいてね
使い方.txt ポータルサイトから ZIPをダウンロードして 適当な場所に解凍して java -jar hoge.jar を実行してください
つらい
提供しやすく利用しやすい アプリケーションの特徴 提供しやすいアプリケーションとは • 誰でも同じ方法でビルドできる • 環境に依存しない 利用しやすいアプリケーションとは • 簡単に入手できる
• 導入の手間がかからない • 誰でも同じ方法で実行できる
提供しやすく利用しやすい アプリケーションの特長 提供しやすいことのメリット • ニーズに合わせて早く提供できる • 計画や開発にリソースを集中できる (リアルJenkinsおじさん不要) 利用しやすいことのメリット •
ユーザに好印象を与える • 多くのユーザを獲得できる • 導入が面倒なアプリは損をしている
JVMベースの アプリケーション (Groovy, Scala, Java等) 固有の課題
JVMベースのアプリケーションの課題 提供側がつらいこと • コマンドラインツールを配布できるエコシステム がない(RubyGemsとかnpmとか) • シェルスクリプトやバッチの同梱が面倒 利用側がつらいこと • JVMのインストールが面倒
• JVMのデフォルト引数がいけてないので ヒープメモリの指定がほぼ必須
アプリケーションの提供と利用の形態 Webサービス ➔ 提供側はアプリをインフラにデプロイ ➔ 利用側はサービスにアクセス コマンドラインツールやWebアプリ ➔ 提供側はアプリをWeb上に公開 ➔
利用側はダウンロードして利用
アプリケーションの提供と利用に GradleやDockerを使う Webサービス ➔ 提供側はアプリをGradleでビルド ➔ 提供側はアプリをDockerでデプロイ ➔ 利用側はサービスにアクセス コマンドラインツールやWebアプリ
➔ 提供側はアプリをGradleでビルド ➔ 提供側はアプリをDocker Hubに公開 ➔ 利用側はDocker Hubから取得
Gradleでビルドして Dockerで配布する
Gradleのメリット 誰でも同じ方法でアプリケーションを ビルドできる • インストール不要でJVMがあれば動く (Gradle wrapper) • ./gradlew build
を叩くだけでアプリを ビルドできる • 必要なライブラリは自動的に取得
Dockerのメリット 誰でも同じ方法でアプリケーション一式を ビルド、配布、実行できる • docker build を叩くだけで イメージをビルドできる • docker
run を叩くだけで コンテナを実行できる • Docker HubやPrivate Registryで イメージを配布できる
Gradle + Docker のメリット 提供側のメリット • 誰でも同じ方法で アプリケーション一式をビルドできる • 統一的な基盤で、
アプリケーション一式を配布できる 利用側のメリット • 誰でも同じ方法で アプリケーションを実行できる
GradleでビルドしてDockerで配布 1. Gradleでアプリケーションをビルド 2. Dockerイメージを配布 3. ユーザはDockerコンテナを実行 Docker イメージ Docker
コンテナ アプリ OS/JVM アプリ OS/JVM 依存JARs ソースコード 設定ファイル 1. ビルド 2. 配布 3. 実行
Gradle Application Plugin アプリケーションの実行に必要なファイル群を生成 してくれるプラグイン • プロダクト本体 • 実行時の依存ライブラリ •
JVMを起動するシェルスクリプト • JVMを起動するバッチファイル ※Gradleに標準で含まれるプラグイン
plugins { id 'groovy' id 'application' } mainClassName = 'org.example.Main'
applicationDefaultJvmArgs = ['-Xmx512m'] アプリケーションを配置する ./gradlew installApp アプリケーションをZIPアーカイブに固める ./gradlew distZip Gradle Application Plugin の使い方 build.gradle
• build/install/groovy-ssh/bin ◦ groovy-ssh ◦ groovy-ssh.bat • build/install/groovy-ssh/lib ◦ groovy-all-2.3.6.jar
◦ groovy-ssh-SNAPSHOT.jar ◦ jna-3.4.0.jar ◦ jsch-0.1.51.jar ◦ ... ◦ platform-3.4.0.jar ◦ slf4j-api-1.7.7.jar Gradle Application Plugin の使用例 シェルスクリプト バッチファイル プロダクト本体 依存ライブラリ
Dockerイメージのビルド時に Gradleを実行する Javaイメージの上でGradleを実行して ビルド済みのアプリケーション一式を載せる Dockerイメージの構成例 ubuntu dockerfiles/java myapp Oracle JDK
7 ビルド済みの アプリケーション一式 OSの最小セット
Dockerイメージのビルド時に Gradleを実行する例 from dockerfile/java:oracle-java7 volume /usr/src/groovy-ssh copy . /usr/src/groovy-ssh run
cd /usr/src/groovy-ssh && \ ./gradlew -g .gradle installApp && \ cp -a build/install/groovy-ssh / workdir /groovy-ssh/bin entrypoint ["./groovy-ssh"] Dockerfile
Dockerを使うと Gradle SSH Pluginが 不要になる... oh...
まとめ JVMベースのアプリケーションを GradleでビルドしてDockerで配布する これにより、 • 提供側は誰でも同じ方法で アプリケーションをビルドできる • Docker Hubで簡単に配布できる
• 利用側は誰でも同じ方法で アプリケーションを実行できる