Docker 快速部署Springboot项目超详细最新版
作者:Touch&
这篇文章主要介绍了Docker 快速部署Springboot项目超详细最新版的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
Docker 快速部署Springboot项目
1、项目准备
1.1 新建一个springboot项目
1.2 打包
mvn clean package -Dmaven.test.skip=true
2、编写Dockerfile文件
# Docker image for springboot file run # VERSION 0.0.1 # Author: # 基础镜像使用java FROM openjdk:8 # 作者 MAINTAINER laihx # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为xx.jar ADD demo.jar test.jar # 运行jar包 RUN bash -c 'touch /test.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]
将jar包和Dockerfile
文件放在上传到同一空目录下
3、执行镜像打包
sudo docker build . -t test-demo:v1.0
查看镜像
docker images
java8镜像:启动springboot需要jdk的支持,所以直接拉取java8
镜像即可docker pull java:8
,拉取结束可以使用docker images
查看是否成功
docker pull java:8 docker images
4、启动镜像
# -d参数是让容器后台运行 # 8087为部署后实际代理端口,8089为程序的端口 sudo docker run -d -p 8087:8089 --name test-demo test-demo:v1.0
5、测试结果
6、动态查看日志
docker logs -f --tail=100 test-demo
扩展:SpringBoot+Docker+IDEA 实现一键构建+推送、运行、同镜像多容器启动(推荐)
场景:
由于公司项目需要,需要使用部署微服务项目,而之前都是使用tomcat部署,操作十分繁琐。最近正好在学习Docker,利用Docker容器做部署尝试
需求:
- 使用Docker部署服务
- 支持idea插件,一键操作构建、推送镜像、运行
- 单个镜像需根据不同端口部署多个容器
- 日志持久化
必要软件
服务器(我的版本为CentOS:7.9)
- Docker(需要开通远程访问,正式环境请使用证书加密,我这里测试用无加密)
- Harbor 镜像仓库(可选)
开发端
- Docker Desktop (支持本地运行docker-compose,如果不用docker-compose插件可以不用)下载地址
- 桌面版docker必要插件下载地址
- docker-comopse 下载地址
- IDEA(废话)
- docker插件 (可选,在idea插件市场下载,名字就叫Docker)
在idea中配置docker
目录结构:
父项目配置(关键配置):
pom.xml
<properties> <!-- docker主机ip(这里填写自己docker所在地址) --> <docker.host>192.168.10.10</docker.host> <!-- harbor仓库地址(可选,构建镜像后自动上传到该仓库) --> <docker.repostory>${docker.host}</docker.repostory> <!-- docker远程地址, 如果是https协议则将http换成https即可 --> <docker.remote>http://${docker.host}:2375</docker.remote> <!--项目名,需要和Harbor中的项目名称保持一致 --> <docker.registry.name>library</docker.registry.name> <!-- 默认端口 --> <port>8080</port> </properties> ... <build> <pluginManagement> <plugins> <!--构建镜像--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.0</version> <configuration> <!--Maven 的配置文件 setting.xml 中增加相关 server 配置,主要配置 Docker registry用户认--> <serverId>docker-harbor</serverId> <dockerHost>${docker.remote}</dockerHost> <!-- 镜像名格式: 仓库地址/仓库项目名/当前项目名 (按需修改) --> <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}</imageName> <baseImage>openjdk:8u282-jdk</baseImage> <maintainer>作者</maintainer> <env> <PORT>8080</PORT> <TZ>Asia/Shanghai</TZ> </env> <!-- 这里的ln和后面的操作是保证时间同步 --> <runs>mkdir -p /epark/logs && ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone</runs> <volumes>/epark</volumes> <!--suppress UnresolvedMavenProperty --> <entryPoint>["java","-Djava.security.egd=file:/dev/./urandom","-jar","${project.build.finalName}.jar","--server.port=${PORT}"] </entryPoint> <!-- 这里是仓库地址,不需要可以删除 --> <registryUrl>http://${docker.repostory}</registryUrl> <!-- 这里指定是否构建成功后自动推送到仓库,不需要可以删除 --> <pushImage>true</pushImage> <resources> <resource> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- docker-compose的maven插件 --> <plugin> <groupId>com.dkanejs.maven.plugins</groupId> <artifactId>docker-compose-maven-plugin</artifactId> <version>2.5.1</version> <configuration> <!-- 路径为: 当前项目的上一级(也就是父项目),所以不支持二级以上的子项目 --> <composeFile>${project.basedir}/../docker-compose.yml</composeFile> <apiVersion>1.22</apiVersion> <host>${docker.remote}</host> <envVars> <!-- 默认端口 --> <port>${port}</port> <host>${docker.repostory}</host> <name>${project.build.finalName}</name> <!-- 自定义项目名,支持单镜像启动多容器的关键 --> <COMPOSE_PROJECT_NAME>${project.build.finalName}-${port}</COMPOSE_PROJECT_NAME> <!-- 这里是证书配置,如果开启了docker证书,则需要配置 --> <!-- <DOCKER_TLS_VERIFY>1</DOCKER_TLS_VERIFY>--> <!-- <DOCKER_CERT_PATH>D:\docker-ca</DOCKER_CERT_PATH>--> </envVars> </configuration> </plugin> </plugins> </pluginManagement> </build>
注意,${project.artifactId}引用的项目构件ID只能是小写
docker-compose.yml
version: '3.4' services: eparking: # 镜像 image: ${host}/library/${name}:latest # 容器名 container_name: ${name}-${port} # 开机自启(自选) #restart: always # 环境配置 environment: # 端口 - PORT=${port} # 端口映射 ports: - "${port}:${port}" # 卷映射,这里日志根据自己项目输出位置调整 volumes: - "/log/${name}/${port}:/logs/"
配置了仓库的话需要配置Maven的settings.xml的账号密码
<servers> <server> <id>docker-harbor</id> <username>仓库用户名</username> <password>仓库密码</password> </server> </servers>
子项目配置(关键配置)
pom.xml
<!-- 这里配置的端口会传入父项目,最终传入docker-compose.yml和Dockerfile文件 --> <!-- 如果需要单个镜像启动多个容器,改这里的端口再启动就可以了 --> <properties> <port>8082</port> </properties> ... <build> <plugins> <!-- docker插件 --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> </plugin> <!-- docker-compose的maven插件,由于docker插件不支持运行,所以单独安装了 --> <plugin> <groupId>com.dkanejs.maven.plugins</groupId> <artifactId>docker-compose-maven-plugin</artifactId> </plugin> </plugins> </build>
如果一切顺利maven中会出现docker和docker-compse插件
先执行docker:build构建,再执行docker-compose:up启动
成功后可以查看docker容器启动情况了,我这里使用的是docker插件
好了,这功能花费了我很长时间,最终实现了这些功能。可能还有些小细节没展示出来,可以尽管提问
到此这篇关于Docker 快速部署Springboot项目超详细最新版的文章就介绍到这了,更多相关Docker 部署Springboot项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!