docker 部署Java项目

本文详细介绍如何使用Docker部署Java项目,包括安装配置、构建Docker镜像、启动容器等步骤,并提供日志管理和定时清理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、将jar包上传到centos上
2、编写Dockerfile文件,创建文件名为Dockerfile的文本文件,将maven打包好的jar包和Dockerfile文件放在同一目录下,内容如下:
在这里插入图片描述
Dockerfile文件内容

FROM java:8

COPY  small_demo.jar  app.jar

RUN bash -c "touch /app.jar"

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

如果没有安装jdk环境,也可以使用以下方式,只有第一行改变了,直接使用java:8-alpine镜像方式。

FROM java:8-alpine

COPY  small_demo.jar  app.jar

RUN bash -c "touch /app.jar"

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

在这里插入图片描述

3、 制作镜像

docker build -t  small .

在这里插入图片描述
制作完成,查看镜像

docker image ls

在这里插入图片描述

4、启动容器

docker run -d -p 8080:8081 small

在这里插入图片描述
重启docker

 systemctl  restart docker

再重启docker 容器
dockers start 容器id
在这里插入图片描述
5、日志清理
有两种方式,一种写脚本定时删除,另一种设置容器日志大小
默认日志存储在/var/lib/docker/containers/目录下
在这里插入图片描述
一、写脚本定时删除
新建脚本,我一般存放在日志目录同级

 vim  /var/lib/docker/containers/clean_docker_log.sh

在这里插入图片描述

#!/bin/sh 
  
echo "======== start clean docker containers logs ========"  
  
logs=$(find /var/lib/docker/containers/*/ -name *-json.log)  
  
for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  

echo "======== end clean docker containers logs ========"  

修改脚本权限

chmod 777 /var/lib/docker/containers/clean_docker_log.sh

执行脚本

./clean_docker_log.sh

在这里插入图片描述
设置定时任务执行脚本
检查本机crond的基本情况

service crond status

在这里插入图片描述
查看当前定时任务

crontab -l

编辑定时任务

crontab -e
# 定时执行脚本
 */1  *  *  *  * /var/lib/docker/containers/clean_docker_log.sh

*/1 :代表每分钟执行
再查看
在这里插入图片描述
重启定时服务

 systemctl  reload crond.service
systemctl  restart  crond.service

二、设置容器日志大小
1.新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "10"
    }
}

max-size=100m,意味着一个容器日志大小上限是100m,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

2.然后重启docker的守护线程

systemctl daemon-reload

systemctl restart docker.service
注意:新创建的容器会生效,原有容器不生效。
### 使用Docker部署Java项目的教程和最佳实践 #### 编写高效的Dockerfile 为了有效地使用Docker部署Java项目,创建一个合适的`Dockerfile`至关重要。这个文件定义了构建镜像所需的全部指令。推荐的做法是从官方的JDK或OpenJDK基础镜像开始,这能确保环境的一致性和安全性。 ```dockerfile FROM openjdk:17-jdk-alpine WORKDIR /app COPY target/my-app.jar my-app.jar ENTRYPOINT ["java", "-jar", "my-app.jar"] ``` 上述代码展示了如何基于Alpine Linux版本的OpenJDK 17创建一个新的工作目录,并将编译好的`.jar`文件复制进去作为入口点启动应用[^1]。 #### 构建与推送镜像 完成`Dockerfile`编写后,下一步就是利用它来构建自定义的应用程序镜像。可以通过简单的命令行操作完成此过程: ```bash $ docker build -t my-java-app . $ docker push my-java-app ``` 这里假设已经登录到了Docker Hub或其他私有仓库中以便于后续分发给其他团队成员或是生产环境中使用[^2]。 #### 启动容器实例 当拥有可用的镜像之后,便可以很方便地通过`docker run`命令来启动新的容器实例。对于大多数场景来说,默认设置就已经足够好用了;不过有时候可能还需要额外指定一些参数比如端口映射、内存限制等选项以满足特定需求。 ```bash $ docker run -d -p 8080:8080 --name=my-running-app my-java-app ``` 这条语句将会以后台模式运行名为`my-running-app`的服务并将主机上的8080端口转发至容器内部相同的端口号上[^3]。 #### 多服务协同工作 如果存在多个相互依赖的服务,则建议采用[Docker Compose](https://docs.docker.com/compose/)工具来进行统一管理。只需要在一个YAML格式的配置文件里描述各个组件之间的关系即可自动处理复杂的交互逻辑。 ```yaml version: '3' services: web: image: my-web-service ports: - "5000:5000" db: image: postgres environment: POSTGRES_USER: user POSTGRES_PASSWORD: password ``` 这段例子说明了一个Web服务器连接PostgreSQL数据库的情况,在开发测试阶段特别有用处[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值