Spring Cloud Alibaba如何打包成Docker镜像并运行
在服务器上启动Nacos
Spring Cloud Alibaba中因为会用到Nacos组件,而Nacos组件的服务端需要在服务器上先运行起来,否则项目启动起来后找不到Nacos服务端会报错!
如何在服务器上启动Nacos呢?
我感觉有两种方式,一种是直接在宿主机上运行,一种是在docker容器中运行,下面采用docker容器中运行方式,宿主机运行方式我自己还没有用过
#从dockerhub上将nacos-server的镜像拉下来,这边默认拉的是最新版本的,用旧版本的容易不兼容 docker pull nacos/nacos-server #单机模式运行镜像,生成一个nacos服务端的容器,这边暴露的端口号我们就用官方使用的端口号 docker run --env MODE=standalone --name qyy-nacos -d -p 8848:8848 nacos/nacos-server:latest
这个时候我们可以在本地浏览器上访问Nacos服务端的可视化页面
http://服务器ip地址:8848/nacos
是下面这样的界面就说明服务器上的Nacos服务端启动成功了(第一次访问需要登录)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7osMQjJf-1630316627402)(C:UsersqyyAppDataRoamingTypora ypora-user-imagesimage-20210830164844358.png)]
给Spring Cloud项目打成jar包,并编写Dockerfile文件
打成jar包之前,有一个原理需要理解,Spring Cloud项目运行的服务需要注册到Nacos服务端中,而这两个东西分别在两个不同的容器中,所以Spring Cloud需要知道Nacos服务端所在容器的IP地址
#查看这个容器的一些详细信息 docker inspect 容器id
有这个地址后就需要去application.properties中去修改Nacos服务端的IP地址
#原来地址:spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.server-addr=172.17.0.6:8848
这边注意要将spring.cloud.nacos.config.server-addr改成spring.cloud.nacos.discovery.server-addr
然后就可以借助maven打包改项目为jar包
再之后就需要些Dockerfile了,写之前先检查一下docker插件有没有下载好,这个下载好后Dockerfile文件写东西时就会有提示了
直接在整个项目下面建Dockerfile文件,命名就是Dockerfile,这样在服务器里面写docker build构建的时候就不用指定Dockerfile了,Dockerfile参考内容见下:
FROM java:8 COPY *.jar /teacherServer.jar CMD ["--service.port=8084"] EXPOSE 8084 ENTRYPOINT ["java","-jar","/teacherServer.jar"]
稍微做一些改进也可以:(看需求,我这边还是采用了第一种)
上传jar包和Dockerfile文件
这边用的是scp,想要了解更多,自行百度
scp E:qyyworkspaceIdeaProjects eacher-serviceDockerfile root@10.0.32.38:/home/idea/teacherService scp E:qyyworkspaceIdeaProjects eacher-service arget eacher-service-0.0.1-SNAPSHOT.jar root@10.0.32.38:/home/idea/teacherService
这个时候的终端是你本地的终端(不要ssh进入服务器) scp 本地文件目录 root@ip:服务器目录
使用docekr build构建镜像
docker build -t qyy/teacherservice:1.0 .
运行这个镜像
先查看这个镜像有没有构建成功
docker images
再运行这个镜像(注意-P是随机指定端口,-p后面要跟着自己指定的端口)
#-it如果换成了-d,那么就是在后台运行,但我感觉还是先-it,不然你都不知道你的项目有没有运行成功 docker run -it -p 8081:8080 --name teacher-service01 qyy/teacherservice:1.0
查看当前运行的容器信息(包含各个容器分配的端口)
[root@dev teacherService]# docker ps
测试
可以直接在服务器上curl,也可以在postman或者本地浏览器上输入网址,网址ip是服务器ip,端口号是运行的容器暴露在外的端口号