docker部署SpringBoot项目
一、需求
通常,部署微服务到docker有以下方式:
- 手动部署:本地IDE打包成jar,在docker环境中创建java环境容器,将jar包使用命令行拷贝至docker容器中,启动。
- 自动部署:通过Maven插件配置参数自动部署。(优先选这个)
二、安装docker及jdk容器
安装docker方法请浏览前面的文章。
安装jdk容器:docker pull openjdk:11
三、开放docker远程部署端口
1,编辑docker配置文件:vim /lib/systemd/system/docker.service
2,修改ExecStart,添加参数(CentOS7): -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
tcp://0.0.0.0:2375表示:表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。
unix://var/run/docker.sock表示:本地客户端将通过这个来连接 Docker Daemon
备注:该方法有漏洞,容易被黑客远程放入挖矿机镜像,开启需做好防范,最好使用防火墙限制ip
3,重启docker服务以刷新配置
systemctl daemon-reload
systemctl restart docker
防火墙配置:firewall-cmd --zone=public --add-port=2375/tcp --permanent
测试远程访问是否生效:curl http://127.0.0.1:2375/info
四、Springboot项目配置
1,添加docker的maven依赖
1 <plugin>
2 <groupId>com.spotify</groupId>
3 <artifactId>docker-maven-plugin</artifactId>
4 <version>1.2.2</version>
5 <configuration>
6 <!-- 镜像名称 -->
7 <imageName>docker/${project.artifactId}</imageName>
8 <!-- Dockerfile文件存放目录 -->
9 <dockerDirectory>src/main/docker</dockerDirectory>
10 <!-- docker远程服务器地址 -->
11 <dockerHost>http://172.19.45.12:2375</dockerHost>
12 <resources>
13 <resource>
14 <targetPath>/</targetPath>
15 <directory>${project.build.directory}</directory>
16 <include>${project.build.finalName}.war</include>
17 </resource>
18 </resources>
19 </configuration>
20 </plugin>
2,在目录src/main/docker下创建 Dockerfile 文件
1 # 基于openjdk 镜像
2 FROM openjdk:11
3 # 将本地文件夹挂在到当前容器
4 VOLUME /tmp
5 # 复制文件到容器
6 ADD centerbusiness.war app.war
7 # 声明需要暴露的端口
8 EXPOSE 8080 8443
9 # 配置容器启动后执行的命令
10 ENTRYPOINT ["sh", "-c", "java $PARAMS -Djava.security.egd=file:/dev/urandom -jar /app.war"]
FROM:使用的基础镜像名称,如果镜像不是本地的会从 DockerHub 进行下载。
VOLUME:VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录。
ADD:拷贝文件并且重命名。
EXPOSE:在Dockerfile中声明了那些端口是需要开放的,在构建容器时通过 -P (大写的P)可以随机映射端口,如果EXPOSE没有指定端口,那么使用 -P 参数无效。本配置只是声明,一般我们需要在构建docker容器时使用-p(小写的p)指定开放的端口。
ENTRYPOINT :sh -c用来指定后面执行的一整行命令都具有执行者的权限,例如针对root执行echo 1 > 1.txt,可以让echo和>两个命令都具有root权限,$PARAMS参数用来占位,在构建docker容器时可以使用-e传入参数,-Djava.security.egd=file:/dev/urandom,用来指定Java的java.security.SecureRandom绑定unix系统的/dev/urandom文件,生成高质量随机数。
3,执行mvn package docker:build
直接执行maven命令,如果是idea开发环境,可以使用图形化maven插件
执行结果:
五、启动docker镜像
使用 docker images 查看打包的镜像
构建docker容器,这里将命令报错为了app.sh。
docker run -d -p 8080:8080 -p 8443:8443 --name centerbusiness docker/centerbusiness
当然这里也可以使用-e添加参数,docker run -e PARAMS=’-Xms128m -Xmx256m’ -p 8080:8080 docker/centerbusiness,此时的 PARAMS就会传递启动jar的参数。
使用 docker ps 查看运行的镜像,有则说明部署成功。
六、放开防火墙端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent 开放8080端口
firewall-cmd --zone=public --add-port=8443/tcp --permanent 开放8443端口
systemctl restart firewalld
七、查看日志
日常维护需要不时查看项目日志,这时可以使用docker logs -f centerbusiness来查看所有在docker容器控制台中的输出内容。
相关文章
- springboot+shiro整合教程
- docker探索-CentOS7中配置Docker的yum源并升级安装docker1.13(十)
- docker镜像构建,Docker 镜像和容器的导入导出
- 运维基础之Docker(7)关于docker latest tag
- Docker - docker in docker(dind)
- SpringBoot整合MyBatis
- Docker 一文教你清理docker空间释放磁盘空间
- Docker的三种网络代理配置:dockerd pull镜像代理;容器docker run网络代理;docker build代理--build-arg
- 【最全最详细】Jenkins+Docker 一键自动化部署 SpringBoot 项目
- 004-docker命令-docker资源配置-Docker容器CPU、memory资源限制
- 78.第十七章 企业级容器技术docker -- Docker 镜像制作和管理(六)
- 【云原生之Docker实战】使用docker部署yesplaymusic个人音乐播放器
- 【云原生之Docker实战】使用docker部署kooteam在线团队协作工具
- 【云原生 • Docker】docker 私有仓库的搭建、配置与镜像上传
- Docker技术----docker-compose实战----快速搭建WordPress博客系统
- 【Docker】之docker-compose的介绍与命令的使用
- 基于Java+SpringBoot+Vue前后端分离学生管理系统设计与实现(有视频讲解)
- Springboot+百度的WebUploader组件实现普通文件的批量上传
- 【springboot项目详解】springboot项目整合-注册功能模块开发
- SpringBoot第三特性:Actuator监控