SpringBoot 整合 Docker

时间:2024-03-03 10:57:10

最近备忘录新加的东西倒是挺多的,但到了新环境水土不服没动力去整理笔记


1. Demo Project

首先准备一个简单的项目,用来部署到 Docker 主机上,并且能验证该项目是否成功运行


1.1 接口准备

准备一个测试接口,用于校验 Docker 部署是否成功

@RestController
@RequestMapping("/")
public class HelloController {

    @GetMapping("/hello")
    public String helle() {
        return "Hello World";
    }
}


1.2 配置准备

在 application.yml 文件中添加 Docker 宿主机地址,方便统一管理(该功能需要安装依赖插件)

server:
  port: 8080

spring:
  application:
    name: docker-deploy-test

docker:
  host: http://xxx.xxx.xxx.xxx:2375






2. Docker 开启远程连接

Docker 也是 Client/Serve 架构(dameon守护进程),其默认只能本地访问, 所以得设置成可外网访问我们才能部署项目到 Docker 上


1.1 修改配置文件

在 Docker 宿主机上编辑配置,添加下面一行配置(意思是任何地址都能访问 2375 端口)

$vim /usr/lib/systemd/system/docker.service
 
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock


1.2 刷新配置、重启

$systemctl daemon-reload
$systemctl restart docker


1.3 认证登录

直接开放 2357 端口,那么任何人都可以往 Docker 宿主机推送东西,笔者当初就被推送了挖矿的镜像,主机卡死登不上去,后来只能无奈重装系统镜像。Docker支持使用 SSL 证书登录,如果在外网环境请务必使用 SSL 登录(笔者记录了 OpenSSL 的笔记 ---- 用于认证,还没来得及整理)







3. IDEA 安装 Docker 插件

笔者 2019 版的 IDEA 已经默认集成了 Docker 插件,不需要再次安装。只需把远程主机地址和端口配上让 IDEA 连接 ,最后验证是否连接上远程 Docker 主机即可


这里新建一个 Docker,填上主机地址会自动连接,显示 Connection successful 则表示 IDEA 连上宿主机了







4. Maven 添加 Docker 插件

上一步的 IDEA 插件可以构建镜像并部署了,还能管理 Docker。但笔者是 maven 插件 和 IDEA 插件并用,能够方便构建程序和部署


<!--  docker 插件  -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>

    <!--  绑定 docker:build 到 maven 的 package 生命周期  -->
    <executions>
        <execution>
            <id>docker-build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>

    <!--  插件的配置  -->
    <configuration>
        <!--  构建的镜像的名字 :标签  -->
        <imageName>${project.artifactId}:${project.version}</imageName>
        <!--  存放dockerfile的路径  -->
        <dockerDirectory>${project.basedir}</dockerDirectory>
        <!--  docker Host 地址,用插件在 initialize 阶段从 application.yml 解析  -->
        <dockerHost>${docker.host}</dockerHost>
        <!--  SSL 认证证书地址,若开启 SSL 登录  -->
        <!--  <dockerCertPath></dockerCertPath>  -->
        <resources>
            <resource>
                <!--  使用什么资源来构建镜像(就是jar包),以及将镜像推送到容器的那个目录下  -->
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>






5. 编写Dockerfile

创建 Dockerfile 文件,填入下面的内容,然后将其放入到项目的根目录


FROM openjdk:8-jdk-alpine

MAINTAINER [author] [Howl@email.com]

ARG JAR_FILE=/target/*.jar

COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]







6. 打包项目

在 Maven 插件中绑定了 Package 与 Docker:build 的执行过程,即把项目打包成 jar 之后会自动执行 Dockr:build 来构建镜像并发布到远程 Docker 宿主机上(若项目较大,那么等待镜像推送到 Docker 宿主机上的时间会较长)








7. 创建容器

在 IDEA 的插件中可以管理 Docker,点开右下角 services 里面可以看到连接上的 Docker 里有刚才构建的镜像,然后我们可以选择这个镜像右键来创建容器


在弹出框里面填入要创建的容器的名字,以及容器映射的端口,最后点击 Run,等待容器启动即可。启动完成后可以在 IDEA 的插件里看到新建的容器,点击可以查看容器的详情








8. 校验部署

使用宿主机的 IP 地址或域名来访问刚才发布的测试接口