昨天被我同学小胖说我写的文章就像是笔记,而不是分享,看来我写文章的技巧真的是需要提高了。
最近在研究docker容器技术如何用于自己的项目,之前就一直想学习docker,无奈琐事一大堆,再加上有时候忙着忙着就忘了。如何让一个人没有时间思考,那就让他一直忙,忙的没时间思考,忙的失去的人生的价值。
闲言碎语讲到这,我们的项目是spring boot+thymeleaf,也是spring官方推荐的搭建方式,不同于spring boot+jsp,spring boot+thymeleaf可以直接打成jar包镜像运行,而spring boot+jsp就不可以,必须是war包才可以。在项目中运用docker打包镜像,关键是gradle和DockerFile,如果你们的项目是maven的就是pom和Dockerfile。
此篇文章的前提:
- 你有一个可以运行的spring boot项目;
- win10开发环境;
- docker已经安装好了;
第一步,配置build.gradle:
buildscript {
ext {
springBootVersion = '2.0.5.RELEASE'
}
repositories {
maven {url 'https://plugins.gradle.org/m2/'}
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
// docker
classpath 'gradle.plugin.com.palantir.gradle.docker:gradle-docker:0.19.2'
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'
group = 'com.qy'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
mavenCentral()
}
dependencies {
compile fileTree(dir: 'lib', include: '*.jar')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-security')
compile 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4'
compile 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.3.0'
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'){
exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}
//Redis
compile ('org.springframework.boot:spring-boot-starter-data-redis')
compile ('org.springframework.session:spring-session-data-redis')
compile ('org.apache.commons:commons-pool2:2.0')
compile('joda-time:joda-time:2.9.9')
compile('org.apache.commons:commons-lang3:3.7')
compile('org.apache.httpcomponents:httpclient:4.5.5')
compile('commons-codec:commons-codec:1.10')
compile('commons-io:commons-io:2.5')
compile('com.thoughtworks.xstream:xstream:1.4.10')
compile('dom4j:dom4j:1.6.1')
compile('com.drewnoakes:metadata-extractor:2.10.1')
compile('com.adobe.xmp:xmpcore:5.1.3')
compile('org.apache.poi:poi:3.17')
compile('com.google.zxing:core:3.3.0')
compile('org.springframework.boot:spring-boot-starter-mail')
runtime("org.springframework.boot:spring-boot-devtools")
runtime('mysql:mysql-connector-java:5.1.46')
runtime('com.zaxxer:HikariCP:2.7.9')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
apply plugin: 'com.palantir.docker'
bootJar {
baseName = 'lql'
version = '1.0.0'
}
docker {
dependsOn build
name "${project.group}/${bootJar.baseName}"
files bootJar.archivePath
buildArgs(['JAR_FILE': "${bootJar.archiveName}"])
}
第二步,编写DockerFile,这个文件的 From指明依赖jdk8,这样镜像在创建的时候就会自动下载jdk8惊醒,不用其他配置。COPY命令是吧本地的jar包复制到容器中,镜像一启动就会自动运行为容器,容器环境是linux系统,这些都是不需要配置的,如果你想指定linux系统,请先下载相应的镜像。ENTRYPOINT指明如何在容器中启动项目。Dockerfile文件内容如下:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
项目结构如下
第三步,运用docker插件生成docker镜像:
第四步,打开powershell,查看镜像,运行镜像,docker run --name lql -p 8080:8080 -t com.qy/lql:
第五步,打开浏览器测试连接,http://localhost:8080/.
到此,镜像创建运行已经完毕。如果在这个过程中遇到问题,根据错误提示信息,冷静分析,应该能找到问题的所在。如有疑问,也可留言讨论。