当前位置:   article > 正文

docker部署jar包项目(看这一篇入门)_解决docker部署jar没有日志

解决docker部署jar没有日志

我用于记录命令和流程
 

1部署流程

 1.1maven打包
        这个没啥可说的,正常打可运行jar包就行

1.2上传服务地址
        将jar不管啥方式传到要部署的服务器上,一般都是xshell,xftp
1.3建立dockerfile
        在上传的jar包位置创建Dockerfile文件

        这里要注意:
        文件名字一定是首字母大写并且保持一致,不要创新!!!!!
        Dockerfile和jar包一定在一个层级目录!!!!!!!!!!

这里建议最好是新建一个文件夹
如下图:


Dockerfile内容:

 

  1. # 基础镜像使用java
  2. FROM java:8
  3. # 作者 名字 邮箱 (可以不写)
  4. MAINTAINER lixilin <15133119533@163.com>  
  5. # 将jar包添加到容器中并更名为app.jar
  6. ADD network-0.0.1-SNAPSHOT.jar app.jar 
  7. # 运行端口
  8. EXPOSE 11530 
  9. # 启动命令,加载指定路径的配置文件
  10. ENTRYPOINT ["java","-jar","app.jar","--spring.config.location=/config/application.yml"]
  11. ## 设置所属时区
  12. ENV TZ=Asia/Shanghai
  13. ## 创建本地和容器的连接
  14. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

PS:

(1)这里会出现一个镜像去多个客户部署的情况,这种就需要动态修改配置文件

这个时候需要加上指定配置路径

ENTRYPOINT ["java","-jar","app.jar","--spring.config.location=/config/application.yml"]

(2)设置时区,如果不设置时区,查看日志的时候你会发现时间相差八小时。。原因是因为默认使用的0时区的时间。

所以需要指定时区和时间

正常情况下面这个配置就可以生效

ENV TZ=Asia/Shanghai   

如果上面配置不生效可以使用下面

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

将服务器的时间目录复制到容器内部

1.4打包镜像

必须要有docker环境才能打包啊,这肯定是前提

一般你去部署都是有docker的,也有别人去部署你提供镜像的情况

这个时候就需要在本地安装一个docker,然后去自己打包成镜像然后给部署的人

默认是有docker环境

前提:cd /usr/local/java_project/network 目录下

命令:注意不要少后边的 '.' 不然会报错

docker build -t  你的镜像名称(一般是你的项目名+版本).

  1. docker build -t network-0.0.1 .

不出意外的话就是下图

docker会一层一层去执行。这里会有一种情况,当你的docker没有java8的基础镜像时候需要等docker下载之后再执行时间会长一些。第二次就不会出现了
1.5运行镜像

 命令:

使用内部配置文件的启动命令

  1. #--restart=always [docker重启之后自动启动]
  2. # --name network-0.0.1 [运行时候的名字,docker ps能查到的]
  3. # -p 10530:11530 [外部请求的端口:容器内部端口dockerfile规定的端口]
  4. # network-0.0.1:latest 是你上一步打包镜像时候的名字:是你的镜像版本(默认)
  5. docker run -d --restart=always --name network-0.0.1 -p 10530:11530 network-0.0.1:latest

使用指定目录下的配置文件启动命令(就是多一个挂载目录)把目录映射出来

  1. #--restart=always [docker重启之后自动启动]
  2. # --name network-0.0.1 [运行时候的名字,docker ps能查到的]
  3. # -p 10530:11530 [外部请求的端口:容器内部端口dockerfile规定的端口]
  4. # network-0.0.1:latest 是你上一步打包镜像时候的名字:是你的镜像版本(默认)
  5. docker run -d --restart=always --name network-0.0.1 -p 10530:11530 -v /usr/local/java_project/network:/config -v /etc/localtime:/etc/localtime network-0.0.1:latest

后边的挂载是防止打包镜像时的时区不生效,再次将时间改成当前时间

运行顺利的话就会是返回这个运行镜像的id

不确定的话用docker ps 看一下

2.这里会有几个常见问题

1.端口占用

 如图所示他会告诉你那个镜像用的这个端口

解决办法:换个端口就行,如果不知道具体那些端口占用的话

docker ps 查看一下运行的镜像的信息,找一个没用的就行,容器内部端口不用管,只需要宿主机的端口唯一就行

2.重名问题

如图会告诉你这个名字已经被用了

解决方法:改个名字加上版本号就行(简单暴力)

还有一个方法就是你能确定这个同名镜像是自己的直接把镜像停了。(一定确定是自己管理的项目)

docker stop 镜像id/名字

3.如何查询项目日志

使用docker的查看容器日志命令

docker logs --tail 300 -f efe348fc21e1

还有个方法是将日志文件映射到外部来

4.删除镜像 (慎用

当你第二次部署同一个项目的时候你也不想打那么多的同名类似的镜像时候使用(慎用

docker rmi e4d5e864dc86

如非必要不要使用,一定要看清楚id是不是自己的镜像别删错了就等着挨枪子把。

名字重名了直接加个版本号或者时间都是可以的如非必要不要乱用

5.比较重要的一点导出自己的镜像

使用场景:项目需要迁移,或者去用户现场部署,或者交给运维人员部署都要用到

先查询自己的镜像的id

docker images

 复制id并导出

docker save -o network-0.0.1.tar network-0.0.1:latest

如果没有报错的情况下去你的物理机上看下是不是已经导出了

 6.导入加载镜像

进入到你导出的镜像目录,或者直接写全路径

  1. docker load -i my.tar
  2. 或者
  3. docker load -i /home/my.tar

再看一下镜像列表 docker images 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/284163
推荐阅读
相关标签
  

闽ICP备14008679号