heroku 部署 Spring Boot Docker Image
准备Docker Image
修改之前创建的Spring Boot
项目, 添加 Docker
插件
build.gradle
plugins {id 'org.springframework.boot' version '2.2.2.RELEASE'id 'io.spring.dependency-management' version '1.0.8.RELEASE'id 'java'id 'com.palantir.docker' version '0.22.1'
}group = 'io.arukas'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'bootJar {baseName = 'spring-boot-heroku-gradle'version = '0.0.1'
}docker {dependsOn buildtags 'latest'dockerfile file('Dockerfile')name "ncc0706/${bootJar.baseName}"files bootJar.archivePathbuildArgs(['JAR_FILE': "${bootJar.archiveName}"])
}repositories {mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'testImplementation('org.springframework.boot:spring-boot-starter-test') {exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'}
}test {useJUnitPlatform()
}
新增Dockerfile
文件
FROM ncc0706/jdk:8u131VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} /opt/application.jarCMD [ "sh", "-c", "java -Dserver.port=$PORT -Xmx300m -Xss512k -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom -jar /opt/application.jar" ]
构建本地镜像
➜ spring-boot-heroku-gradle-docker git:(master) gradle docker
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :compileJava
> Task :processResources
> Task :classes
> Task :bootJar
> Task :dockerfileZip
> Task :assemble
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses> Task :test
2019-12-27 21:58:05.695 INFO 1782 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'> Task :check
> Task :build
> Task :dockerClean UP-TO-DATE
> Task :dockerPrepare
> Task :dockerBUILD SUCCESSFUL in 26s
9 actionable tasks: 8 executed, 1 up-to-date
推送到 docker hub
➜ spring-boot-heroku-gradle-docker git:(master) gradle dockerPush
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :bootJar UP-TO-DATE
> Task :dockerfileZip UP-TO-DATE
> Task :assemble UP-TO-DATE
> Task :compileTestJava UP-TO-DATE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test UP-TO-DATE
> Task :check UP-TO-DATE
> Task :build UP-TO-DATE
> Task :dockerClean
> Task :dockerPrepare
> Task :docker
> Task :dockerTagLatest
> Task :dockerTag> Task :dockerPush
The push refers to repository [docker.io/ncc0706/spring-boot-heroku-gradle]
126d444a90fe: Preparing
7b1b25aff4b3: Preparing
75baf32179d0: Preparing
7bff100f35cb: Preparing
75baf32179d0: Mounted from ncc0706/heroku-me
126d444a90fe: Pushed
7b1b25aff4b3: Mounted from ncc0706/heroku-me
7bff100f35cb: Mounted from ncc0706/heroku-me
latest: digest: sha256:e4465a5bbd70b79c049e5f9c8e3a1afccb5f3a8019733cc70d4baa5b77c2cca8 size: 1163BUILD SUCCESSFUL in 50s
11 actionable tasks: 5 executed, 6 up-to-date
查看构建好的镜像
➜ spring-boot-heroku-gradle-docker git:(master) docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ncc0706/spring-boot-heroku-gradle latest a7c43414abf5 2 minutes ago 187MB
进入正题开始部署 Docker Image 到 heroku
随意创建一个目录,这里我用的 deploy
, 创建2个文件如下
Dockerfile
这里的 Dockerfile
跟刚才创建的不一样哦,就是上面推送到 docker hub 的镜像名称
FROM ncc0706/spring-boot-heroku-gradle
heroku.yml
指定当前目录的 Dockerfile
,如果两个文件不在同一目录需指定相对路径
build:docker:web: Dockerfile
初始化仓库
进入 deploy
目录就是上面创建的
# 初始化仓库
$ git init# 添加文件到本地暂存区
$ git add .# 提交到本地仓库
$ git commit -am "ready build"
[master (root-commit) 3a1cf00] ready build2 files changed, 4 insertions(+)create mode 100644 Dockerfilecreate mode 100644 heroku.yml
创建应用
注意需要登录
$ heroku create spring-boot-heroku-gradle-docker
Creating ⬢ spring-boot-heroku-gradle-docker... !! Name is too long (maximum is 30 characters)## 上面提示名称太长了,再换个$ heroku create spring-boot-gradle-dockerCreating ⬢ spring-boot-gradle-docker... done
https://spring-boot-gradle-docker.herokuapp.com/ | https://git.heroku.com/spring-boot-gradle-docker.git
开始构建
# 容器技术部署
$ heroku stack:set container
Stack set. Next release on ⬢ spring-boot-gradle-docker will use container.
Run git push heroku master to create a new release on ⬢ spring-boot-gradle-docker.
git push heroku master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 323 bytes | 323.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: === Fetching app code
remote:
remote: === Building web (Dockerfile)
remote: Sending build context to Docker daemon 3.072kB
remote: Step 1/1 : FROM ncc0706/spring-boot-heroku-gradle
remote: latest: Pulling from ncc0706/spring-boot-heroku-gradle
remote: cd784148e348: Pulling fs layer
remote: 3651dac5ddfb: Pulling fs layer
remote: 1d73d5612a08: Pulling fs layer
remote: 21d15a920adf: Pulling fs layer
remote: 21d15a920adf: Waiting
remote: cd784148e348: Verifying Checksum
remote: cd784148e348: Download complete
remote: cd784148e348: Pull complete
remote: 21d15a920adf: Verifying Checksum
remote: 21d15a920adf: Download complete
remote: 3651dac5ddfb: Verifying Checksum
remote: 3651dac5ddfb: Download complete
remote: 3651dac5ddfb: Pull complete
remote: 1d73d5612a08: Verifying Checksum
remote: 1d73d5612a08: Download complete
remote: 1d73d5612a08: Pull complete
remote: 21d15a920adf: Pull complete
remote: Digest: sha256:e4465a5bbd70b79c049e5f9c8e3a1afccb5f3a8019733cc70d4baa5b77c2cca8
remote: Status: Downloaded newer image for ncc0706/spring-boot-heroku-gradle:latest
remote: ---> a7c43414abf5
remote: Successfully built a7c43414abf5
remote: Successfully tagged b70bfb6b84da29431508650a9923a60aba64ac27:latest
remote:
remote: === Pushing web (Dockerfile)
remote: Tagged image "b70bfb6b84da29431508650a9923a60aba64ac27" as "registry.heroku.com/spring-boot-gradle-docker/web"
remote: The push refers to repository [registry.heroku.com/spring-boot-gradle-docker/web]
remote: 126d444a90fe: Preparing
remote: 7b1b25aff4b3: Preparing
remote: 75baf32179d0: Preparing
remote: 7bff100f35cb: Preparing
remote: 7bff100f35cb: Pushed
remote: 126d444a90fe: Pushed
remote: 75baf32179d0: Pushed
remote: 7b1b25aff4b3: Pushed
remote: latest: digest: sha256:e4465a5bbd70b79c049e5f9c8e3a1afccb5f3a8019733cc70d4baa5b77c2cca8 size: 1163
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/spring-boot-gradle-docker.git* [new branch] master -> master
查看启动日志
$ heroku logs --tail
2019-12-27T14:17:40.177009+00:00 app[api]: Enable Logplex by user fdtomn@gmail.com
2019-12-27T14:17:40.177009+00:00 app[api]: Release v2 created by user fdtomn@gmail.com
2019-12-27T14:17:39.723167+00:00 app[api]: Initial release by user fdtomn@gmail.com
2019-12-27T14:17:39.723167+00:00 app[api]: Release v1 created by user fdtomn@gmail.com
2019-12-27T14:19:35.480563+00:00 app[api]: Release v3 created by user fdtomn@gmail.com
2019-12-27T14:19:35.480563+00:00 app[api]: Upgrade stack to container by user fdtomn@gmail.com
2019-12-27T14:19:35.467047+00:00 app[api]: Stack changed from heroku-18 to container by user fdtomn@gmail.com
2019-12-27T14:20:03.000000+00:00 app[api]: Build started by user fdtomn@gmail.com
2019-12-27T14:20:28.120580+00:00 app[api]: Release v4 created by user fdtomn@gmail.com
2019-12-27T14:20:28.120580+00:00 app[api]: Deploy 3a1cf002 by user fdtomn@gmail.com
2019-12-27T14:20:28.135935+00:00 app[api]: Scaled to web@1:Free by user fdtomn@gmail.com
2019-12-27T14:20:28.000000+00:00 app[api]: Build succeeded
2019-12-27T14:20:31.367067+00:00 heroku[web.1]: Starting process with command `sh -c java\ -Dserver.port\=\31283\ -Xmx300m\ -Xss512k\ -Dfile.encoding\=UTF-8\ -Djava.security.egd\=file:/dev/./urandom\ -jar\ /opt/application.jar`
2019-12-27T14:20:34.684410+00:00 app[web.1]:
2019-12-27T14:20:34.684615+00:00 app[web.1]: . ____ _ __ _ _
2019-12-27T14:20:34.684753+00:00 app[web.1]: /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
2019-12-27T14:20:34.684891+00:00 app[web.1]: ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2019-12-27T14:20:34.684977+00:00 app[web.1]: \\/ ___)| |_)| | | | | || (_| | ) ) ) )
2019-12-27T14:20:34.685113+00:00 app[web.1]: ' |____| .__|_| |_|_| |_\__, | / / / /
2019-12-27T14:20:34.685178+00:00 app[web.1]: =========|_|==============|___/=/_/_/_/
2019-12-27T14:20:34.686582+00:00 app[web.1]: :: Spring Boot :: (v2.2.2.RELEASE)
2019-12-27T14:20:34.686634+00:00 app[web.1]:
2019-12-27T14:20:34.953867+00:00 app[web.1]: 2019-12-27 22:20:34.945 INFO 3 --- [ main] io.arukas.SpringBootHerokuApplication : Starting SpringBootHerokuApplication on 626e4fdc-cb75-427b-a5b3-ebfce4331a1b with PID 3 (/opt/application.jar started by u27814 in /)
2019-12-27T14:20:34.959825+00:00 app[web.1]: 2019-12-27 22:20:34.959 INFO 3 --- [ main] io.arukas.SpringBootHerokuApplication : No active profile set, falling back to default profiles: default
2019-12-27T14:20:37.154185+00:00 app[web.1]: 2019-12-27 22:20:37.153 INFO 3 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 31283 (http)
2019-12-27T14:20:37.169525+00:00 app[web.1]: 2019-12-27 22:20:37.169 INFO 3 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-12-27T14:20:37.169832+00:00 app[web.1]: 2019-12-27 22:20:37.169 INFO 3 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.29]
2019-12-27T14:20:37.255854+00:00 app[web.1]: 2019-12-27 22:20:37.255 INFO 3 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-12-27T14:20:37.255979+00:00 app[web.1]: 2019-12-27 22:20:37.255 INFO 3 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2050 ms
2019-12-27T14:20:37.559123+00:00 app[web.1]: 2019-12-27 22:20:37.558 INFO 3 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-12-27T14:20:37.869291+00:00 app[web.1]: 2019-12-27 22:20:37.869 INFO 3 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 31283 (http) with context path ''
2019-12-27T14:20:37.875301+00:00 app[web.1]: 2019-12-27 22:20:37.874 INFO 3 --- [ main] io.arukas.SpringBootHerokuApplication : Started SpringBootHerokuApplication in 3.876 seconds (JVM running for 4.667)
2019-12-27T14:20:38.135299+00:00 heroku[web.1]: State changed from starting to up
从日志看我们已经用Dockerfile
成功部署 Spring Boot
,还是用浏览器看看效果吧,访问地址: https://spring-boot-gradle-docker.herokuapp.com
.
项目源码: https://github.com/heroku-sample/spring-boot-heroku-gradle-docker.git
heroku 部署 Spring Boot Docker Image相关推荐
- 使用 Docker 部署 Spring Boot
使用 Docker 部署 Spring Boot Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. ...
- Spring Boot 2 (四):使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- docker添加新的环境变量_Docker的安装及部署Spring Boot项目操作详解!
本文使用Docker部署Spring Boot项目.部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven:接着搭建一个Spring Boot项目, ...
- Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器
不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...
- 一键部署 Spring Boot 到远程 Docker 容器
首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署. 文章目录 一.前提条件 1. SpringBoot项目 2. Docker插件 3. Doc ...
- springboot 微服务_使用 Docker 部署 Spring Boot微服务
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot
http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...
- docker image设置jdk版本_Docker 部署 Spring Boot
作者:云天 镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 一.Docker 简介 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容 ...
最新文章
- 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
- android源码分析-深入MessageQueue
- hibernate----N-1(一)
- phpstrom查看代码总行数_歪特内推浦发银行总行信息科技部
- openssh升级之后git账户免密登陆失效
- 介绍Angular的注入服务
- 手把手教你从0开始建中台
- mergsort.c
- tomcat下载安装及配置教程
- 值得收藏的网盘搜索引擎网盘搜索工具
- 常见的网络协议和端口号
- SQLServer把日期/时间数据转换为指定格式之CONVERT()函数
- 餐巾计划问题【网络流24题】
- 计算机应用研究 增刊,计算机应用研究增刊是核心吗_计算机研究应用_计算机应用...
- Java基础eclipse版(二)——JDK、Eclipse的下载与安装
- 高中信息技术计算机网络教案,信息技术 - 第八册计算机教案(全册)-四年级...
- 戴尔R710服务器配置raid阵列(附图文)
- 3D音频再现理论研究(一)---3D音频技术历史介绍(转)
- Cozmo人工智能机器人SDK使用笔记(1)-基础部分basics
- MyCat是使用介绍