docker部署springboot三种方式
docker部署springboot三种方式项目源码网址:https://gitee.com/shao_ming314/note/tree/master/%E8%84%9A%E6%89%8B%E6%9E%B6-%E7%9B%B4%E6%8E%A5%E7%94%A8/docker%E9%83%A8%E7%BD%B2springboot%E7%9A%843%E7%A7%8D%E6%96%B9%E5%B
docker部署springboot三种方式
项目源码网址:
https://gitee.com/shao_ming314/note/tree/master/%E8%84%9A%E6%89%8B%E6%9E%B6-%E7%9B%B4%E6%8E%A5%E7%94%A8/docker%E9%83%A8%E7%BD%B2springboot%E7%9A%843%E7%A7%8D%E6%96%B9%E5%BC%8F
本文参考网址:
https://mp.weixin.qq.com/s/k5gjh3YEMKYt70vvnGtqDg
准备工作
创建一个springboot项目spring-boot-docker
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neo</groupId>
<artifactId>spring-boot-docker</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>spring-boot-docker</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.properties
server.port=8081
新建一个测试的controller
@Controller
public class HelloController {
@Value("${server.port}")
private String port;
@GetMapping("/")//get请求
@ResponseBody
public String hello() {
System.out.println("hello docker,该项目的端口好为:"+port);
return "hello docker,该项目的端口好为:"+port;
}
}
启动项目测试

第一种方式
不使用插件和idea
初始化项目目录如下

1.项目打包
项目根目录执行命令:
mvn clean package

2.在项目根目录添加Dockerfile文件
Dockfile
FROM java:8
VOLUME /tmp
ADD target/spring-boot-docker-1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.构建镜像
在项目根目录执行命令
docker build -t app .

4.运行容器
使用docker命令:
# 查看镜像
docker images
# 运行容器
docker run --name myboot -p 8081:8081 -itd app
# 查看容器日志
docker logs -f myboot
5.测试访问
启动项目测试

容器中的日志如下

第二种方式(使用maven插件)
1.在相应位置编写dockerfile
在项目的/src/main目录下新建docker文件夹,在里面添加dockerfile文件
文件内容如下:
Dockerfile
FROM java:8
COPY *.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
2.编辑修改pom.xml
修改后:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neo</groupId>
<artifactId>spring-boot-docker</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>spring-boot-docker</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
</project>
3.构建镜像
使用mavne的docker插件构建镜像
mvn package docker:build
4.运行容器
使用docker命令:
# 查看镜像
docker images
# 运行容器
docker run --name myboot -p 8081:8081 -itd springboot/spring-boot-docker
# 查看容器日志
docker logs -f myboot
5.测试访问
启动项目测试

容器中的日志如下

第三种方式(推荐):整合idea
1.开启docker远程访问
修改docker的/usr/lib/systemd/system/docker.service配置文件
vim /usr/lib/systemd/system/docker.service
老版本docker开启远程访问需要添加如下配置
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

新版本docker开启远程访问需要添加如下配置
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

配置完成后,保存退出,然后重启 Docker:(一定要重启,否则会不生效)
systemctl daemon-reload
service docker restart
Docker 重启成功之后,Docker 的准备工作就算是 OK 了。
测试docker是否开启远程访问
测试是否可以远程访问:宿主机浏览器访问 ip:2375/version

出现如上信息,证明docker开启远程访问成功
2.配置idea
IDEA 上的准备工作,主要是安装一个 Docker 插件,点击 File->Settings->Plugins->Browse Repositories 如下:
说明:
新版本的idea都是内置了docker插件
配置docker连接信息

配置docker加速镜像地址

3.在项目根目录编写dockerfile
FROM java:8
VOLUME /tmp
ADD target/spring-boot-docker.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
4.配置maven插件
配置好的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neo</groupId>
<artifactId>spring-boot-docker</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>spring-boot-docker</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<!-- 跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--配置docker的连接信息-->
<dockerHost>http://192.168.66.78:2375</dockerHost>
<!-- 配置镜像的名称 -->
<imageName>shaoming/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!--build 时强制覆盖 tag,配合 imageTags 使用-->
<forceTags>true</forceTags>
<!-- 指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
5.构建镜像
接下来对项目进行打包,打包完成后,项目会自动构建成一个镜像,并且上传到 Docker 容器中,打包方式如下:

打包过程会稍微有一点旧,因为还包含了镜像的构建,特别是第一次打包,需要下载基础镜像,会更慢一些。
部分打包日志如下(项目构建过程):

项目打包成功之后,我们就可以在 Docker 容器中看到我们刚刚打包成的镜像了,如下:

6.运行容器
6.1运行方式一
使用docker命令:
# 查看镜像
docker images
# 运行容器
docker run --name myboot -p 8081:8081 -itd shaoming/spring-boot-docker:latest
# 查看容器日志
docker logs -f myboot
6.2 运行方式二
此时我们的 IDEA 中多了一个选项,就是 docker,如下:
说明:
每个idea版本都有差异,所以docker插件配置可能也有差异

点击左边的绿色启动按钮,连接上 Docker 容器,连接成功之后,我们就可以看到目前 Docker 中的所有容器和镜像了,当然也包括我们刚刚创建的 Docker 镜像,如下:

右键创建容器

配置容器的相关信息

7.测试访问
启动项目测试

容器中的日志如下
est
查看容器日志
docker logs -f myboot
#### **6.2** **运行方式二**
此时我们的 IDEA 中多了一个选项,就是 docker,如下:
说明:
> 每个idea版本都有差异,所以docker插件配置可能也有差异
[外链图片转存中...(img-fPHxV1xX-1618906137998)]
点击左边的绿色启动按钮,连接上 Docker 容器,连接成功之后,我们就可以看到目前 Docker 中的所有容器和镜像了,当然也包括我们刚刚创建的 Docker 镜像,如下:
[外链图片转存中...(img-NbuiowF5-1618906137999)]
右键创建容器
[外链图片转存中...(img-bfQfDubr-1618906138000)]
配置容器的相关信息
[外链图片转存中...(img-yI2bvduJ-1618906138001)]
### 7.测试访问
启动项目测试
[外链图片转存中...(img-z5IzRv7s-1618906138002)]
容器中的日志如下

更多推荐
所有评论(0)