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
850
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
880
AppEngine × Spring Boot × Kotlin
int128
0
120
いつものJIRA設定
int128
1
190
Swaggerのテンプレートを魔改造した話 / Customize Swagger Templates
int128
1
4.8k
本番環境のリリースを自動化した話
int128
0
770
Swagger × Spring Cloud
int128
0
100
Other Decks in Technology
See All in Technology
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
170
PHP開発者のためのSOLID原則再入門 #phpcon / PHP Conference Japan 2025
shogogg
1
390
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
100
Snowflake Summit 2025 データエンジニアリング関連新機能紹介 / Snowflake Summit 2025 What's New about Data Engineering
tiltmax3
0
250
白金鉱業Meetup_Vol.19_PoCはデモで語れ!顧客の本音とインサイトを引き出すソリューション構築
brainpadpr
2
490
実践! AIエージェント導入記
1mono2prod
0
150
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
10
2.9k
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
570
TechLION vol.41~MySQLユーザ会のほうから来ました / techlion41_mysql
sakaik
0
160
Windows 11 で AWS Documentation MCP Server 接続実践/practical-aws-documentation-mcp-server-connection-on-windows-11
emiki
0
730
OpenHands🤲にContributeしてみた
kotauchisunsun
0
230
Definition of Done
kawaguti
PRO
6
460
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
GraphQLとの向き合い方2022年版
quramy
46
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
The Cost Of JavaScript in 2023
addyosmani
51
8.4k
Side Projects
sachag
455
42k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Documentation Writing (for coders)
carmenintech
71
4.9k
Fireside Chat
paigeccino
37
3.5k
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で簡単に配布できる
• 利用側は誰でも同じ方法で アプリケーションを実行できる