您的位置:首页 > 运维架构 > Docker

springboot 整合 docker, 进行自动化部署,其实没你想象的那么难

2020-07-13 05:35 501 查看

前言

要在spring boot 项目中整合docker,实现自动化部署,其实是非常简单的事情,下面我们一一进行详细说明,

服务端开启docker远程端口

要开启docker远程端口,需要修改配置文件,命令

vim /lib/systemd/system/docker.service

  1. 修改ExecStart 这一行,中间增加-H tcp://0.0.0.0:2375,如下图

    退出并保存
  2. 重新加载配置文件

systemctl daemon-reload

  1. 重启docker服务

systemctl restart docker 或 systemctl restart docker.service

idea 安装docker 插件

  1. 在idea 中安装docker plugs ,如下图
  2. 配置docker 服务地址和端口
    配置好了,就会显示Connection successful

编写demo服务工程,部署docker

现在我们创建一个demo工程,如图

  1. Controller代码如下
package springbootdocker.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author: dengcs
* @Date: 2020/7/2 10:56
* Comment:
*/
@RestController
public class HellowController {

@GetMapping("/hello")
public String testHelloDocker(){
return "hello word Docker";
}

}
  1. pom文件配置
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>spring-boot-docker</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<packaging>jar</packaging>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
<!--properties节点中设置docker镜像的前缀“springboot”-->
<docker.image.prefix>springio</docker.image.prefix>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</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>
<!-- end::plugin[] -->
</plugins>
</build>

</project>
  1. 工程下创建Dockerfile文件,如下
  2. Dockerfile源文件代码如下
#FROM frolvlad/alpine-oraclejdk8:slim ,这个仓库已经找不到
FROM ascdc/jdk8
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar app.jar
#COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

创建docker镜像

  1. 从Run->Edit Configrations进入配置界面,如下图
  2. 在配置Bind ports 时,如下图

    完成后,如下图
  3. 在docker服务器上输入命令也能看到

docker images


4. 测试结果
运行起来后,看测试结果为

手工部署

也可以通过手工部署的方式,如下

  1. 在docker服务器创建一个文件夹为docker,上传上面的Dockfile文件及jar包
  2. 通过docker build命令创建镜像

docker build -t dengcs/dockerdemo:1.0 .
注意:最后一个点" . " 。 它很重要,表示上下文路径。那么什么是上下文路径?看下面解析
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。


解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

  1. 启动容器
    启动容器命令

docker run -d --name dockerdemo-test -p 8080:8080 dengcs/dockerdemo:1.0

写在最后

总之,不管是手工部署,还是自动部署,都要创建Dockerfile文件,这个才是最重要的环节。

如果想了解更多docker知识,请关注我吧 _

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: