• 【Docker】【IDEA】springboot在服务器docker容器化部署,IDEA远程debug


    在这里插入图片描述

    前言

    前期环境配置可以参考

    【虚拟机】【ssh】本地ssh连接虚拟机 - Xshell配置与虚拟机ip配置

    【虚拟机】vmware虚拟机创建 centos7系统配置

    安装docker

    安装docker,输入:

    yum install -y docker
    
    • 1

    在这里插入图片描述
    检查一下是否下载docker成功:

    docker version
    
    • 1

    在这里插入图片描述

    依次输入:

    systemctl start docker.service
    
    • 1
    systemctl enable docker.service
    
    • 1

    在这里插入图片描述

    JDK部署docker

    装个jdk11

    docker pull openjdk:11
    
    • 1

    在这里插入图片描述

    随后查看镜像列表:

    docker images
    
    • 1

    可以看到

    在这里插入图片描述

    创建将jdk镜像容器化运行:

    docker run -d -t --name java11 openjdk:11
    
    • 1

    在这里插入图片描述

    随后查看docker的容器化进程:

    docker ps
    
    • 1

    在这里插入图片描述

    我们可以看看运行进程的log:

    docker logs 容器ID
    
    • 1

    在这里插入图片描述

    Springboot项目准备

    随便创建一个springboot项目,

    在这里插入图片描述

    随便命名为

    springboot-print
    
    • 1

    在这里插入图片描述

    项目结构为:

    在这里插入图片描述
    配置依赖和代码如下:

    pom.xml

    
    
        4.0.0
    
        org.example
        springboot-print
        1.0-SNAPSHOT
    
        
            11
            11
        
    
        
            org.springframework.boot
            spring-boot-starter-parent
            2.3.7.RELEASE
             
        
    
    
        
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.boot
                spring-boot-starter-web-services
            
    
            
            
                org.springframework.boot
                spring-boot-starter-validation
            
    
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    2.3.7.RELEASE
                    
                        
                            
                                repackage
                            
                        
                    
                
            
        
    
    
    • 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

    注意部分能够让maven把项目和项目需要的依赖一起打包,才能打包好的jar包正常运行。

    application.properties

    server.port=8080
    
    • 1

    MainApplication.java

    package org.sample;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MainApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    HelloController.java

    package org.sample.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    
    /**
     * 控制器
     */
    @RestController
    public class HelloController {
    
        @ResponseBody
        @GetMapping("/hello")
        public String modifyPassword() {
            System.out.println("hello, docker");
            int a = 1;
            System.out.println("hello, springboot");
            return "hello, world";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    我们可以本地运行一下 MainApplication.java,随后访问 http://localhost:8080/hello

    可以看到网页显示:
    在这里插入图片描述

    控制台也打印了:
    在这里插入图片描述

    部署准备

    我们进入 usr 文件夹

    cd /usr/
    
    • 1

    在这里插入图片描述

    在这里创建一个docker文件夹:

    mkdir docker
    
    • 1

    在这里插入图片描述

    在docker文件夹中再创建一个 springboot-print文件夹:

    mkdir springboot-print
    
    • 1

    在这里插入图片描述

    关闭防火墙,关闭防火墙开机自启,输入:

    systemctl stop firewalld
    systemctl disable firewalld.service
    
    • 1
    • 2

    在这里插入图片描述

    修改/usr、/usr/docker、/usr/docker/springboot-print文件夹的所有者和所属组均为我们用户:

    chown 账号:密码 /usr/docker/springboot-print
    chown 账号:密码 /usr/docker
    chown 账号:密码 /usr
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    在这里插入图片描述

    重启虚拟机:

    reboot
    
    • 1

    在这里插入图片描述

    项目部署docker

    我们把项目maven clean,再maven package

    在这里插入图片描述
    在这里插入图片描述
    完成后,在项目文件夹的target文件夹中应该能找到打包好的项目:

    在这里插入图片描述

    随后把这个jar包传入 /usr/docker/springboot-print 文件夹:

    我这里是通过Xshell中的文件传输平台:

    在这里插入图片描述

    打开目标文件夹 /usr/docker/springboot-print 后,把jar包拖入进去就行

    在这里插入图片描述

    在这里插入图片描述

    进入 springboot-print 文件夹:

    在这里插入图片描述
    在这里插入图片描述

    创建Dockerfile:

    vi Dockerfile
    
    • 1

    i进入insert模式,输入:

    FROM openjdk:11
    LABEL maintainer="zhuiliDylan"
    VOLUME /usr/docker
    ADD springboot-print-1.0-SNAPSHOT.jar app.jar
    RUN bash -c 'touch /app.jar'
    ENTRYPOINT ["java","-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005","/app.jar"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里我们设置了java运行的参数,设置debug端口为5005

    在这里插入图片描述

    输入:wq,回车,这时我们有如下文件:

    在这里插入图片描述

    随后构建镜像:

    docker build -t springboot-print:1.0 .
    
    • 1

    在这里插入图片描述

    可以看到构建成功了。

    docker images 可以查看刚刚的创建的镜像:

    在这里插入图片描述

    接着容器化运行:

    docker run -d -t --name springboot-print -v /usr/docker:/usr/docker -p 9091:8080 -p 9092:5005 springboot-print:1.0
    
    • 1

    这里,我们将docker容器中的8080端口(用于项目访问)映射到了外部的9091端口,5005端口(用于debug)映射到了外部9092端口

    在这里插入图片描述

    成功后,查看docker 容器化运行的进程:

    docker ps
    
    • 1

    在这里插入图片描述

    查看我们的 springboot-print:1.0的log,(这里的ID复制自 docker ps的进程ID),可以看到项目运行时的控制台输出:

    docker logs -f 容器ID
    
    • 1

    在这里插入图片描述

    可以看到,我们的项目在docker中运行成功。

    打开浏览器通过http://192.168.10.200:9091/hello访问一下项目:

    在这里插入图片描述

    成功!在命令行也能看到输出:

    在这里插入图片描述

    IDEA远程debug

    回到IDEA中,点击

    在这里插入图片描述

    或者

    在这里插入图片描述

    可以看到这个界面:

    在这里插入图片描述

    点击+号:

    在这里插入图片描述

    点击Remote或者Remote JVM Debug

    在这里插入图片描述

    接下来配置远程debug,做命名,填上IP和端口:

    在这里插入图片描述

    我将连接命名为Docker-springboot-print-debug,这个命名可以随意,host为192.168.10.200,端口号为9092(我们在docker中将debug的5005端口映射成了9092端口)。

    填好之后点击Apply,点击确定。直接点击右上角debug按钮:

    在这里插入图片描述

    在这里插入图片描述

    能够正常进行debug,需要项目代码和本地代码完全一致,这点本文肯定是满足的。出现这个界面就说明成功了:

    在这里插入图片描述

    接下来就可以像本地debug一样,在感兴趣的地方打断点了,比如:

    在这里插入图片描述

    我们接下来再到浏览器去访问http://192.168.10.200:9091/hello接口:

    在这里插入图片描述

    远程debug成功啦!

    问题参考

    docker 拉取镜像失败:

    [root@docker /]# docker pull openjdk:11
    Trying to pull repository docker.io/library/openjdk ...
    11: Pulling from docker.io/library/openjdk
    001c52e26ad5: Pulling fs layer
    d9d4b9b6e964: Downloading [>                                                  ] 52.58 kB/5.156 MB
    2068746827ec: Pulling fs layer
    9daef329d350: Waiting
    d85151f15b66: Waiting
    66223a710990: Waiting
    db38d58ec8ab: Waiting
    error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/47/47a932d998b743b9b0bcce55aa8ede77de94a6a183c8a67dec9d5e3b8ce0faa7/data?verify=1691761388-zuTNHbS7xIot0becB8ByKTd4QdU%3D: net/http: TLS handshake timeout
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    参考

    https://blog.csdn.net/u010197332/article/details/127389815

    另外
    1)在/etc/docker中必须用daemon.json,不能daemon.conf,否则可能镜像拉不了

    2)如果出现docker启动不了,可以在/etc/docker 把daemon.json.savem中的内容删掉

  • 相关阅读:
    Python学习-流程图、分支与循环(branch and loop)
    流媒体分析之rtmp 协议flv 封装
    aarch64 python 3.6.8 pip install neutron
    做自媒体视频剪辑必备辅助工具分享
    深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集
    【免费个人网站制作】免费个人网站如何制作?
    scrapy--豆瓣top250--中间件
    华为OD机试真题-简易内存池-2024年OD统一考试(C卷D卷)
    【springboot】10、处理请求参数
    ZCMU--1577: 食堂的蛋饼
  • 原文地址:https://blog.csdn.net/fisherish/article/details/126195370