之前写过2篇关于Docker部署的文章:

1、超!超!超简单,Linux安装Docker

2、Docker通过阿里云镜像仓库使用Gitlab_CI部署SpringBoot项目

用上篇博客部署Java程序是ok的,不过Java日志打印在容器里,不能满足原来ELK的日志搜集。

方法有2种:

1、在Docker容器内部加入日志收集工具,Filebeat或Logstash。

2、将打Docker内的日志打印到宿主机的目录。

本文用的第二种,下面再慢慢说思路,开始叻

先看项目不迷糊

1、首先 Dockerfile 里的 ENTRYPOINT配置Java日志输出无果

# 基础镜像使用Java
FROM java:8
LABEL name=shop-client-prod
LABEL version=v0.0.1
# 将jar包添加到容器中并更名为
# 注意:这个jar包文件名,请前方服务器 目录查看
COPY /shop-client/target/shop-client-1.0-SNAPSHOT.jar /usr/local/app/client.jar
# 容器暴露端口
EXPOSE 7071
# 这个暂且不用
# COPY target/lib /app/lib
ENTRYPOINT ["nohup","java","-Djava.security.egd=file:/dev/./urandom","-jar","-Dspring.profiles.active=master","/usr/local/app/shop-client.jar", ">client.out" , "&"]

  改为执行shell脚本的方式,把启动Jar的指令拆出来

# 基础镜像使用Java
FROM java:8
LABEL name=shop-client-prod
LABEL version=v0.0.1
# 将jar包添加到容器中并更名为
# 注意:这个jar包文件名,请前方服务器 目录查看
COPY /shop-client/target/shop-client-1.0-SNAPSHOT.jar /usr/local/app/client.jar
COPY /shop-client/clientStart.sh /usr/bin/clientStart.sh
# 数据卷
VOLUME /usr/local/app/logos
# 容器暴露端口
EXPOSE 7071
RUN chmod +x /usr/bin/clientStart.sh
CMD ["sh","/usr/bin/clientStart.sh"]

2、项目路径下创建clientStart.sh文件,用于启动Jar包

#!/bin/bash
# author: Linnuo
# date: 2021-12-16
# Filename: clientStart.sh
# Description: 启动客户端后台
nohup java -Djava.security.egd=file:/dev/./urandom -jar -Dspring.profiles.active=dev /usr/local/app/client.jar --server.port=7071 >/usr/local/app/logs/client.out

  这里启动Jar不要后台运行

3、gitlab-ci.yml 文件修改Docker的启动命令

# 第1步
client:
image: maven:3-jdk-8
stage: client
only:
- master
script:
- mvn clean package
# 创建shop-client镜像
- sudo docker build -t $CI_REGISTRY_CLIENT_IMAGE -f ./shop-client/Dockerfile .
# 推送到阿里云镜像库
- sudo docker push $CI_REGISTRY_CLIENT_IMAGE
# 从阿里云拉取镜像
- sudo docker pull $CI_REGISTRY_CLIENT_IMAGE
# 先把之前存在的容器删除
- CONTAINER_ID=$(sudo docker container ps -a -f "name=$CI_CLIENT_IMAGE" --format {{.ID}})
- echo "previous container id is $CONTAINER_ID"
- if [ -z "$CONTAINER_ID" ]; then echo "没有运行的容器";else sudo docker stop $CONTAINER_ID;sudo docker rm $CONTAINER_ID; fi
# 把之前同名同版本的镜像A删除,否则A标签会变为 <none>
- EXIST_IMAGES=$(sudo docker images -f="dangling=true" -f "label=name=$CI_CLIENT_IMAGE" -f "label=version=$VERSION" --format {{.ID}})
- if [ -z "$EXIST_IMAGES" ]; then echo "没有冲突镜像";else sudo docker rmi $EXIST_IMAGES; fi
# 获取最新镜像
- IMAGE_ID=$(sudo docker images -f="dangling=false" -f "label=name=$CI_CLIENT_IMAGE" -f "label=version=$VERSION" --format {{.ID}})
- echo "current image id is $IMAGE_ID"
### 重新构建镜像,8181端口是服务器的端口,8080端口是容器的端口,即项目中设置的端口(默认8080)
- sudo docker run -d --name $CI_CLIENT_IMAGE --net=host $IMAGE_ID
tags:
- robot-shop-prod-tag

  修改 sudo docker run 启动这行即可,如下:

- sudo docker run -e TZ="Asia/Shanghai" -itd -v /usr/local/server/mall_server:/usr/local/app/logs:z --privileged=true --name $CI_CLIENT_IMAGE --net=host $IMAGE_ID

  这里说一下:

-e TZ="Asia/Shanghai"                       #指定服务器时区,默认格林威治时间
-itd                                #后台运行伪装,不然输出不了日志文件
-v /usr/local/server/mall_server:/usr/local/app/logs:z  #将宿主机目录挂载到容器内对应路径,并容器共享路径
--privileged=true                        #授权,让容器获取宿主机root权限

Ok, 进到宿主机服务器目录就可以看到你的日志啦

cd /usr/local/server/mall_server

喜大普奔

通过Docker部署Java项目的日志输出到宿主机指定目录的更多相关文章

  1. docker 部署 java 项目

    Docker Docker官方网址: https://docs.docker.com/  英文地址 Docker中文网址: http://www.docker.org.cn/ 中文地址 Docker是 ...

  2. 使用docker部署java项目

    在接触了docker后,干什么都想用docker来弄.最近刚做完毕业设计,本来是说将项目简单在本地部署就行了,结果老师说如果部署在服务器的话有加加分,于是果断用docker来搞,多加点分. java项 ...

  3. jenkins+docker部署java项目

    jenkins + maven + jdk + docker + docker register + dockerfile jenkins插件 # 安装插件 SSH # 配置 系统设置-> SS ...

  4. tomcat部署java项目

    tomcat部署java项目 1.启动tomcat 进入到tomcat安装目录下的bin #cd /opt/tomcat/bin #./startup.sh // 执行重启命令 2.重建一个新目录导入 ...

  5. Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery

    前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...

  6. docker初体验:Docker部署SpringCloud项目eureka-server

    Docker部署SpringCloud项目eureka-server 1 创建eureka-server工程 创建父工程cloud-demo,其pom.xml如下: <?xml version= ...

  7. RedHat Linux 5.5安装JDK+Tomcat并部署Java项目

    与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...

  8. windows一键部署java项目

    windows一键部署java项目 因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址.就像安装软件一样将jdk,tomcat,mys ...

  9. jenkins部署java项目,脚本文件放在远程仓库中 和jar一起打包(六)

    jenkins部署java项目到远程linux上,脚本文件和项目一起上传到gogs上,直接执行gogs上的脚本文件来执行项目 (1)新建maven项目 pom.xml的配置 <project x ...

随机推荐

  1. [loj3276]遗迹

    假设已知$a_{i}$,通过以下方式确定$b_{i}$:从后往前枚举每一个数$i$,先令$b_{i}=a_{i}$,再将$b_{i}$不断减1直至不存在$j>i$且$b_{i}=b_{j}$或$ ...

  2. 【Spring】(1)-- 概述

    Spring框架 -- 概述 2019-07-07  22:40:42  by冲冲 1. Spring的概念 ① Spring框架的关键词:开源框架.轻量级框架.JavaEE/J2EE开发框架.企业级 ...

  3. 从零开始学Kotlin第一课

    Kotlin的方法: 一个简单的计算器: fun main(args:Array<String>){ //主函数main方法 var a=8; var b=9; println(plus( ...

  4. python网络自动化运维paramiko实验

    运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.5 ...

  5. Run For Beer CF575G

    Run for beer CF 575G 如果直接bfs分层贪心可以做,但是很毒瘤,具体可以参考Gavinzheng的提交 考虑魔改dijkstra 首先,每次拿权值最小的来松弛肯定没有问题,只是怎么 ...

  6. hash_map,map,unordered_map效率

    利用unordered_map代替hash_map 实验环境 操作系统 fedora9 编译器版本 gcc4.3 实验方式 各种map使用插入和查找,比较速度和相关性能 代码 参考代码 下面测试说明了 ...

  7. JuiceFS 数据读写流程详解

    对于文件系统而言,其读写的效率对整体的系统性能有决定性的影响,本文我们将通过介绍 JuiceFS 的读写请求处理流程,让大家对 JuiceFS 的特性有更进一步的了解. 写入流程 JuiceFS 对大 ...

  8. 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  9. abundant

    In ecology [生态学], local abundance is the relative representation of a species in a particular ecosys ...

  10. Jenkins:参数化构建:分支|模块|回滚|打印日志

    @ 目录 多分支 安装Git Parameter Plug-In 配置参数 选择构建分支 分模块 前提 分模块build 参数配置 分模块shell脚本 mvn 的基本用法 分模块运行 Jenkins ...