当前位置:   article > 正文

docker部署springboot三种方式_docker部署springboot 三种方式

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%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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

application.properties

server.port=8081
  • 1

新建一个测试的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;
         }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

启动项目测试

image-20210420145458468

第一种方式

不使用插件和idea

初始化项目目录如下

image-20210420145918617

1.项目打包

项目根目录执行命令:

mvn clean package
  • 1

image-20210420150218059

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"]

  • 1
  • 2
  • 3
  • 4
  • 5

3.构建镜像

在项目根目录执行命令

 docker build -t app .
  • 1

image-20210420150314408

4.运行容器

使用docker命令:

# 查看镜像
docker images
# 运行容器
docker run --name myboot -p 8081:8081 -itd app
# 查看容器日志
docker logs -f myboot
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.测试访问

启动项目测试

image-20210420145458468

容器中的日志如下

image-20210420150848518

第二种方式(使用maven插件)

1.在相应位置编写dockerfile

在项目的/src/main目录下新建docker文件夹,在里面添加dockerfile文件

文件内容如下:

Dockerfile

FROM java:8
COPY *.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

  • 1
  • 2
  • 3
  • 4

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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

3.构建镜像

使用mavne的docker插件构建镜像

mvn package docker:build
  • 1

4.运行容器

使用docker命令:

# 查看镜像
docker images
# 运行容器
docker run --name myboot -p 8081:8081 -itd  springboot/spring-boot-docker
# 查看容器日志
docker logs -f myboot
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.测试访问

启动项目测试

image-20210420145458468

容器中的日志如下

image-20210420150848518

第三种方式(推荐):整合idea

1.开启docker远程访问

修改docker的/usr/lib/systemd/system/docker.service配置文件

vim /usr/lib/systemd/system/docker.service
  • 1
老版本docker开启远程访问需要添加如下配置

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

image-20210420151921267

新版本docker开启远程访问需要添加如下配置

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

image-20210420151937594

配置完成后,保存退出,然后重启 Docker:(一定要重启,否则会不生效)

systemctl daemon-reload

service docker restart

Docker 重启成功之后,Docker 的准备工作就算是 OK 了。

测试docker是否开启远程访问

测试是否可以远程访问:宿主机浏览器访问 ip:2375/version

image-20210420160111884

出现如上信息,证明docker开启远程访问成功

2.配置idea

IDEA 上的准备工作,主要是安装一个 Docker 插件,点击 File->Settings->Plugins->Browse Repositories 如下:

说明:

新版本的idea都是内置了docker插件

配置docker连接信息

image-20210420152405448

配置docker加速镜像地址

image-20210420152243297

3.在项目根目录编写dockerfile

FROM java:8
VOLUME /tmp
ADD target/spring-boot-docker.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  • 1
  • 2
  • 3
  • 4

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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96

5.构建镜像

接下来对项目进行打包,打包完成后,项目会自动构建成一个镜像,并且上传到 Docker 容器中,打包方式如下:

image-20210420152850604

打包过程会稍微有一点旧,因为还包含了镜像的构建,特别是第一次打包,需要下载基础镜像,会更慢一些。

部分打包日志如下(项目构建过程):

image-20210420152935455

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

image-20210420153114849

6.运行容器

6.1运行方式一

使用docker命令:

# 查看镜像
docker images
# 运行容器
docker run --name myboot -p 8081:8081 -itd  shaoming/spring-boot-docker:latest
# 查看容器日志
docker logs -f myboot
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
6.2 运行方式二

此时我们的 IDEA 中多了一个选项,就是 docker,如下:

说明:

每个idea版本都有差异,所以docker插件配置可能也有差异

image-20210420153921661

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

image-20210420154134996

右键创建容器

image-20210420154201417

配置容器的相关信息

image-20210420154556295

7.测试访问

启动项目测试

image-20210420145458468

容器中的日志如下

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)]

容器中的日志如下

![image-20210420150848518](https://img-blog.csdnimg.cn/img_convert/8da294d36fe8d38db372a485ccc00ef4.png)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/57839
推荐阅读
相关标签
  

闽ICP备14008679号