- 1、安装docker
- 2、 部署Java项目(这里我们以nacos为例子)
- 3、docker 部署 spring boot 的 .jar 项目
- 4、jar包映射部署(实现替换 jar 包后容器自动部署)
(1)yum 包更新到最新 sudo yum update (2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 (3)设置yum源为阿里云 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo (4)安装docker sudo yum install docker-ce (5)安装后查看docker版本 docker -v (6)ustc镜像源设置 vi /etc/docker/daemon.json 注:1.docker文件夹不存在,需要先创建文件夹,再创建文件 2.这里使用阿里的镜像(比较快) { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }2、 部署Java项目(这里我们以nacos为例子)
拉取nacos镜像并启动:
docker pull nacos/nacos-server
启动nacos命令:
docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODE=hostname -e MODE=standalone nacos/nacos-server
至此,我们已经可以使用nacos服务,UI地址:http://:8848/nacos 账号:nacos 密码:nacos:
上述方式是最简便的方式启动,但这样的话有一点小瑕疵,nacos所有元数据都会保存在容器内部。倘若容器迁移则nacos源数据则不复存在,所以通常我们通常会将nacos元数据保存在mysql中。下面附上配置方式:
修改配置文件:
#1 查看docker容器,nacos启动成功 docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8149bca96437 nacos/nacos-server "bin/docker-startup.…" 4 minutes ago Up about a minute 0.0.0.0:8848->8848/tcp nacos #2 进入容器 docker exec -it 8149bca96437 /bin/bash #3 修改 conf/application.properties 内容如下: vi conf/application.properties
数据库脚本:
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/meta-INF/nacos-db.sql
根据数据库位置修改你的nacos配置 文件(如:application.properties 内容替换为):
# spring server.contextPath=/nacos server.servlet.contextPath=/nacos server.port=8848 management.metrics.export.elastic.enabled=false management.metrics.export.influx.enabled=false server.tomcat.accesslog.enabled=true server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i server.tomcat.basedir= nacos.security.ignore.urls=/,*.css,*.js,*.html,*.map,*.svg,*.png,*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/** spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://: /nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=password
退出容器:
exit
查看容器ID:
docker ps
重启容器:
docker restart 8149bca964373、docker 部署 spring boot 的 .jar 项目
1.将项目打成jar包
pom.xml 打包配置:
elq-gateway org.springframework.boot spring-boot-maven-plugin
打包完成后把jar 包传到服务器,自己创建个文件夹,比如我的:
4.进入到你创建的目录中
5.编写Dockerfile文件(重要)
在服务器新建一个dockerfile文件
命令:
vi dockerfile
在文件中存入如下内容(请根据自己的目录或名称进行调整):
# Docker image for springboot file run # VERSION 0.0.1 # Author: eangulee # 基础镜像使用java FROM java:8 # 作者 MAINTAINER YL # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar【1、这里根据jar包名字进行调整!!!】 ADD elq-gateway.jar elq_gateway.jar # 运行jar包【2、这里根据jar包名字进行调整!!!】 RUN bash -c 'touch /elq_gateway.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/elq_gateway.jar"]
解释下这个配置文件:
- VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
- 项目的 jar 文件作为 “app.jar” 添加到容器的
- ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
6.制作镜像
执行下面命令, 看好,最后面有个"."点!
# -t 参数是指定此镜像的tag名 docker build -t elq_gateway .
制作完成后通过docker images命令查看我们制作的镜像
docker images
7、启动容器
docker run -d -p 88:88 elq_gateway
8、访问网站
直接浏览器访问: http://你的服务器ip地址:88/
已经进来了!
按照上文的步骤已足可以轻松应对docker部署springboot的全流程。但是这样在启动容器后,每次需更新jar包时,都得重新制作镜像,再重新制作容器。流程及其繁琐,效率极低。那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?
- 1、更新dockerfile (这是我们原来的文件)
dockerfile 文件替换成这个:
FROM java:8 # 暴露端口 EXPOSE 88 # 运行 ENTRYPOINT ["java","-jar","/data/elq-gateway.jar"]
然后重新创建镜像:
docker build -t elq_gateway_new .
创建容器:
docker run --name elq_gateway_new -it -v /java_web/elq/docker-jar/gateway:/data -d -p 88:88 elq_gateway_new
这里说明一下,这个容器里面的 jar 包 我们已经映射到了 /java_web/elq/docker-jar/gateway 这个文件夹下:
所以我们想要重新部署的话只需要替换这里的jar 包,这样容器里的就也跟着变了,我们再重新启动容即可。
启动容器:
docker start elq_gateway_new
重启容器:
docker restart elq_gateway_new
sh脚本批量处理:
#elq_datacenter cd /java_web/elq/docker-jar/datacenter; sleep 1; docker build -t elq_datacenter . ; sleep 8; docker run --name elq_datacenter -it -v /java_web/elq/docker-jar/datacenter:/data -d -p 8000:8000 elq_datacenter; #elq_product cd /java_web/elq/docker-jar/product; sleep 1; docker build -t elq_product . ; sleep 8; docker run --name elq_product -it -v /java_web/elq/docker-jar/product:/data -d -p 8100:8100 elq_product; #elq_gateway cd /java_web/elq/docker-jar/gateway; sleep 1; docker build -t elq_gateway . ; sleep 8; docker run --name elq_gateway -it -v /java_web/elq/docker-jar/gateway:/data -d -p 88:88 elq_gateway;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)