centos7 安装 docker 并 部署Java微服务项目

centos7 安装 docker 并 部署Java微服务项目,第1张

centos7 安装 docker 并 部署Java微服务项目

文章目录
      • 1、安装docker
      • 2、 部署Java项目(这里我们以nacos为例子)
      • 3、docker 部署 spring boot 的 .jar 项目
      • 4、jar包映射部署(实现替换 jar 包后容器自动部署)

1、安装docker
    (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 8149bca96437

3、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/

已经进来了!

4、jar包映射部署(实现替换 jar 包后容器自动部署)

按照上文的步骤已足可以轻松应对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;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5071134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存