idea上运行springboot&docker
絮絮叨叨:说实话已经很久不来CSDN上写些什么了,有时候自己做做笔记,有时候工作太忙又忘记了。分享的精神居然被我抛弃了,总是到准备换工作的时候才想起来整理整理,回头看发现自己做的东西确实好杂……好了,下面开始今天的主题。(ps:csdn的markdown没以前好使了?)
环境准备
- java:这个就不多说了,网上安装教程很多,基本都是ok,没有问题的,照着操作就是了
- idea:官网安装,之后试用就行,然后戳这个链接,照着来就行了,美滋滋
- docker:这里说的是插件,不是别的,idea-setting-plugins-搜索框直接搜,安装-重启就行了
- 服务器docker:安装就不说了,windows没试过,linux的需要修改配置,目的就是允许远程访问,开放2375端口来允许开发机连接服务器的docker,如下:
- root权限编辑
vi /lib/systemd/system/docker.service
- 找到ExecStart开头的这一行,替换保存即可
ExecStart=/usr/bin/dockerd -H tcp://tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock
- 加载docker配置
systemctl daemon-reload
- 重启服务器的docker
systemctl restart docker
- 完事儿
环境验证
怎么验证真的能远程访问?
IDEA–setting–Build,Excution,Deployment–Docker添加一个,名字随便取,然后在TcpSocket的Engine Api Url里填上"tcp://ip:2375",下边会告诉你连接是否成功。
springboot&docker运行
- springboot编码
其实到这里才真的开始编码,新建一个springboot的工程,添加依赖,写个简单的启动类:
@RestController
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class DataManagerApplication {
@RequestMapping("/")
public static String index(){
return "hello!this is docker;";
}
public static void main(String[] args) {
SpringApplication.run(DataManagerApplication.class, args);
}
}
配置文件:
server.port=8080
server.servlet.context-path= /demo
- dockerfile编写
写过dockerfile的人肯定不会对这个陌生,如果只是整个java环境起个简单的springboot没有问题的
#指定基础镜像,在其上进行定制
FROM java:8
#这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /tmp 中写入的信息都不会记录进容器存储层
VOLUME /tmp
#复制上下文目录下的target/demo-1.0.0.jar 到容器里
ADD target/docker-1.0-SNAPSHOT.jar app.jar
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080
#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-jar","/app.jar"]
注意dockerfile的位置,在配置的时候是会要指定的,并且dockerfile和jar包的位置也要注意
- 运行
指定dockerfile文件位置以及端口号映射镜像名称执行命令啥的,之后直接运行,就会自动清理、打包并部署到服务器上
- 收尾
运行起来基本没啥问题,而且之前已经存在同名的镜像会自动移除掉保证环境不会太多镜像,感觉idea的这个docker可视化工具不错。后边会再说一下遇到的几个小问题。
两个小问题
- docker运行spring boot 包镜像出现no main manifest attribute问题(注意:尽量把这个plugin放在build的第一个)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>demo.test.DataManagerApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
- 网上有人提到运行docker使用docker插件的,建议先不要使用,如下:
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
我看了下maven仓库以及github,上边那个好像过期了已经,不推荐使用,而且依赖也下不下来了。最新的可以考虑下使用这个:
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
完结撒花
2021年2月4日凌晨:争取以后多数出点文字,沉淀下来总结一下,加油!
主要当自己笔记备忘用,会比较零散