springboot + docker 实现远程部署

2022-07-17 12:37:13

前言:
centos + docker + jdk1.8 + idea
亲测有效!!!

1.demo项目
在这里插入图片描述

@SpringBootApplication
public class DockerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DockerApplication.class, args);
    }
}
@RestController
public class DockerController {
    @RequestMapping("/")
    public String index() {
        return "Hello Docker!";
    }
}
<spring.boot.version>2.1.0.RELEASE</spring.boot.version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></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></dependency></dependencies>

启动项目,访问url 成功即可!!!

2.docker 相关文件
在pom.xml中加入

<properties><docker.image.prefix>springboot</docker.image.prefix></properties><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.2.0</version><configuration><!-- 镜像名称  --><imageName>${docker.image.prefix}/${project.artifactId}</imageName><!-- Dockerfile 文件目录 --><dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory><!-- docker远程服务地址 ,前提是docker服务器需开启远程访问--><dockerHost>http://192.168.1.12:2375</dockerHost><resources><resource><targetPath>/</targetPath><!-- 资源所在目录 --><directory>${project.build.directory}</directory><!-- 生成的.jar文件 --><include>${project.build.finalName}.jar</include></resource><resource><targetPath>/</targetPath><!-- 资源所在目录 --><directory>${project.build.outputDirectory}</directory></resource></resources></configuration></plugin><!-- Docker maven plugin --></plugins></build>

注意这里面 imageName 标签中的名字必须都为小写!!!如果有大写会报错!!

Dockerfile

# 基础镜像使用java
FROM openjdk:8-jdk-alpine
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD projecttodocker-1.0-SNAPSHOT.jar  app.jar
# 运行jar包
RUN /bin/sh  -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

projecttodocker-1.0-SNAPSHOT.jar 为jar后的文件,根据自己的项目修改

打包指令
在这里插入图片描述
在new goal 中输入 保存后运行

clean package -DskipTests docker:build

如果发生错误,显示的是连接问题,那么我们需要手动打开docker对外端口
vim /lib/systemd/system/docker.service
修改一下代码

#原代码
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
#改为
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375  --containerd=/run/containerd/containerd.sock

保存后,再执行

# 重新加载守护进程配置
systemctl daemon-reload   
# 重启 docker 服务       
systemctl restart docker.service

如果上述指令没成功,请检查docker.service文件,一定有代码错误的地方。
如果是阿里云或者腾讯云,一定要记得在安全控制台中开放相应端口!!!

再次执行导包指令,看到success则为成功。
进入docker中 查看

docker images  #查看镜像
#启动服务
docker run -itd --name 容器名  -p 8080:8080 镜像名:版本号
#查看容器是否启动
docker ps

正常启动后,在浏览器输入网址 即可查看

附录:
小编在使用中,遇到了很多问题。如果问题实在无法解决的时候,可以采用jar包上传服务器的方法进行。下面我就简单的给大家说一下:
1.利用idea打包生成jar包 (方法同上)
在这里插入图片描述
将红框中的文件上传到服务器中
建议目录为 /opt/docker/jar ,两个文件必须在同一级目录下

#cd 到文件夹下  执行
docker build -t name:tag .
例如: docker build -t project:v1.0 .   #一定要在结尾加这个点!!

执行成功后,我们可以查看docker镜像,后续步骤同上。

经验之谈:
现在网上的解决方案,都是各式搬运,各种代码缺失,各种错误漏洞,简直是误人子弟。建议各位同学在学习过程中,多看几个文章,多试几个例子。取长补短,形成自己的解决方案。

参考文献:
https://blog.csdn.net/appleyk/article/details/87367281
https://blog.csdn.net/ic_esnow/article/details/113284475
https://blog.csdn.net/qq_31104725/article/details/107319320?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1.control&spm=1001.2101.3001.4242

  • 作者:酸菜炖龙虾
  • 原文链接:https://blog.csdn.net/qq_42709881/article/details/119878663
    更新时间:2022-07-17 12:37:13