目录
使用Dcoker构建部署Java项目,发布到服务器
我这里打包的是item-service这个module,clean-cpmpile-package
避坑:?像我这样的目录结构,item-service里面有引用父类的pom,并且也引用了公共组件common的pom依赖,那么,在打包item-service之前,需要现将父工程和common工程进行:clean-cpmpile-package-install,随后才可以完成打包item-service。
打包完成在target下有一个包:
这个是等会需要上传的文件。
还有一个坑是:
?item-service这个服务的pom里面需要有:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
?不然镜像构建好之后,docker run时发现报错,找不到主类。
# 使用官方的OpenJDK 8作为基础镜像 FROM openjdk:8-jdk-alpine # 将本地当前目录下的jar包复制到容器的/app路径下 COPY item-service.jar /app.jar # 设置容器启动时运行jar包命令 ENTRYPOINT ["java", "-jar", "/app.jar"]
?COPY item-service.jar /app.jar? ?这一行命令的item-service.jar是我将前面打包后上传的服务名字改了,如果不改,就得写成下同的名字。
将Dockerfile文件和服务的jar包上传到一个目录下:
docker build -t item-service .
?后面的item-service是镜像名字,最后又一个点,是构建在当前目录的
docker run -d --name item-service --network demo -p 8082:8082 item-service
?这里设置了网桥,如果说你项目的其他组件,例如:MySQL、Nacos等都使用Docker部署,这些组件需要在一个网桥里面才能够互相访问,我这里是自定义了一个网桥,默认的网桥的bridge。配置网桥之后,Docker里面容器互相访问,是通过容器名字访问的,所以,yml配置文件中凡是涉及到IP地址的,都需要改为容器的名字:
?启动之后可以用docker logs + 镜像名字来查看启动日志,这个就和你在idea控制台的启动日志一样了,只要没报错就算是启动成功了,然后docker ps 看一下容器的状态ok不ok。
# 开放端口
sudo firewall-cmd --add-port=8082/tcp --permanent# 查看端口是否放行
firewall-cmd --query-port=8082/tcp# 重启防火墙
sudo firewall-cmd --reload?
如果跟我一样买的云服务器,还要去控制台开端口。
齐活儿~