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

前言

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

服务端开启docker远程端口

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

vim /lib/systemd/system/docker.service

  1. 修改ExecStart 这一行,中间增加-H tcp://0.0.0.0:2375,如下图
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第1张图片
    退出并保存
  2. 重新加载配置文件

systemctl daemon-reload

  1. 重启docker服务

systemctl restart docker 或 systemctl restart docker.service

idea 安装docker 插件

  1. 在idea 中安装docker plugs ,如下图
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第2张图片
  2. 配置docker 服务地址和端口
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第3张图片配置好了,就会显示Connection successful

编写demo服务工程,部署docker

现在我们创建一个demo工程,如图
springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第4张图片

  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文件,如下
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第5张图片
  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进入配置界面,如下图
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第6张图片
  2. 在配置Bind ports 时,如下图
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第7张图片
    完成后,如下图
    springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第8张图片
  3. 在docker服务器上输入命令也能看到

docker images

springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第9张图片
4. 测试结果
运行起来后,看测试结果为
springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第10张图片

手工部署

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

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

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

springboot 整合 docker, 进行自动化部署,其实没你想象的那么难_第11张图片
解析:由于 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知识,请关注我吧 _

你可能感兴趣的:(springboot 整合 docker, 进行自动化部署,其实没你想象的那么难)