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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hidetake Iwata
December 19, 2014
Technology
980
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GradleでビルドしてDockerで配布する
JGGUG大忘年会LT大会と、LondonのG*なカンファレンス行ってきた報告!+合宿の報告もあるよ!
https://jggug.doorkeeper.jp/events/17692
Hidetake Iwata
December 19, 2014
More Decks by Hidetake Iwata
See All by Hidetake Iwata
Rewrite Go error handling using AST transformation
int128
1
1.4k
Cluster AutoscalerをTerraformとHelmfileでデプロイしてPrometheusでモニタリングする / Deploy the Cluster Autoscaler with Terraform and Helmfile, Monitor with Prometheus
int128
3
1.9k
認証の仕組みとclient-go credential plugin / authentication and client-go credential plugin
int128
7
8k
CLIでOAuth/OIDCを快適に利用する
int128
0
1k
AppEngine × Spring Boot × Kotlin
int128
0
170
いつものJIRA設定
int128
1
250
Swaggerのテンプレートを魔改造した話 / Customize Swagger Templates
int128
1
5k
本番環境のリリースを自動化した話
int128
0
850
Swagger × Spring Cloud
int128
0
140
Other Decks in Technology
See All in Technology
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
140
いかに伝えるか 〜新卒エンジニアの教育のための、ライトノベル活用の一例
ikedon
1
210
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
0
110
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / Lazy Terraform
masasuzu
0
200
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
2.3k
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
200
grill-me(grilling):AI駆動開発を超助けてくれるSkill / grill me
mathbullet
0
110
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
130
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
580
Hub & Spoke 環境のネットワークルーティングを分解してみる
tsuyataku
1
530
PM領域でのAI Agentの活用
lycorptech_jp
PRO
0
270
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
160
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
First, design no harm
axbom
PRO
2
1.3k
Balancing Empowerment & Direction
lara
6
1.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Practical Orchestrator
shlominoach
191
12k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Code Review Best Practice
trishagee
74
20k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
720
Writing Fast Ruby
sferik
630
63k
The Curse of the Amulet
leimatthew05
2
14k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
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で簡単に配布できる
• 利用側は誰でも同じ方法で アプリケーションを実行できる