JDK | 1.8 |
---|---|
编译器 | IDEA |
docker环境操作系统 | CentOS7.6 |
spring boot 版本 | 2.1.1.RELEASE |
Docker 版本 |
参考:在IDEA中创建spring Boot项目
在项目入口类添加一个测试接口,代码如下:
@SpringBootApplication
@RestController
public class DemoApplication {
@RequestMapping("/hello")
public String home() {
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
我创建了一个名为 demo的项目
在 pom.xml-properties
中添加 Docker 镜像名称前缀
<properties>
<java.version>1.8java.version>
<spring-cloud.version>Greenwich.RC2spring-cloud.version>
<docker.image.prefix>vikidocker.image.prefix>
properties>
在 pom.xml-plugins
中添加 docker 插件
<plugin>
<groupId>com.spotifygroupId>
<artifactId>dockerfile-maven-pluginartifactId>
<version>1.4.9version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jarJAR_FILE>
buildArgs>
configuration>
plugin>
Docker有一个简单的Dockerfile文件格式,用于指定图像的“layer”。那么让我们继续在Spring Boot项目中创建一个Dockerfile
:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
注: app.jar 可改为你具体的应用jar包名称
这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中。
java.security.egd
的系统属性指向/dev/urandom
作为这里是在CentOS7.6上安装docker环境
请参考我的另一篇博文 CentOS7.6安装Docker,注意,需要使用Docker 中国加速器,否则下载镜像时,会超时。
yum install java java-devel
注:需要安转java-devel,否则Maven会报找不到JRE的错误,虽然执行java -version没有异常。
请参考另一篇博文Linux(CentOS7.x)下安装Maven
将demo项目上传到服务器,进入项目进行打包测试
mvn clean package
启动测试项目是否正常工作
java -jar target/demo-0.1.ja
看到成功日志说明环境没有问题,接下来我们使用 DockerFile 构建镜像
mvn clean package dockerfile:build
构建成功后验证,生成了期望的viki/demo的镜像
[root@MiWiFi-R3-srv demo]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
viki/demo latest 07a1ed182817 9 seconds ago 119MB
[root@MiWiFi-R3-srv demo]# docker run -p 8080:8080 -t viki/demo
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.1.RELEASE)
看到容器中的应用成功启动。
在浏览器中访问 http://宿主机IP:8080/hello
看到期望的返回结果:Hello Docker World
构建成功!
场景需求:
我们的spring boot项目打包进入docker,但我们根据不同的环境(开发、测试、生产)需要设置不同的参数,如数据库的IP地址,配置中心的IP地址等。如下面的例子:我们Spring boot的application.yml配置文件中,定义了变量db-ip
,在启动容器时,通过 -e
参数将内容值传递进容器。
server:
port: 9100
db-ip: localhost
db-port: 3306
spring:
datasource:
url: jdbc:mysql://${server.db-ip}:${server.db-port}/cds-config?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
connection-test-query: SELECT 1 FROM DUAL
connection-timeout: 30000
maximum-pool-size: 200
max-lifetime: 1800000
minimum-idle: 50
docker命令如下:
docker run -p 9100:9100 -e server.db-ip=10.131.5.181 production/cds-config-server:latest
这样,application.yml文件会变为10.131.5.181
[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/root/.m2/repository), alimaven (http://maven.aliyun.com/nexus/content/groups/public/)] -> [Help 1]
解决方法是:解决办法是修改 maven 的配置文件 settings.xml,在pluginGroups 处增加如下内容,
com.spotify
Must specify baseImage if dockerDirectory
应该使用mvn clean package dockerfile:build
,而不是mvn clean package docker:build
1、使用Docker 部署Spring Boot项目
2、spring boot官网docker构建章节