126 lines
2.5 KiB
Markdown
126 lines
2.5 KiB
Markdown
title: 使用Docker部署Java程序
|
||
tags: []
|
||
categories: []
|
||
date: 2023-05-17 21:59:19
|
||
---
|
||
# 背景
|
||
|
||
个人小网站升级之路中,介绍了最后使用Docker部署应用程序,本文就着重介绍怎么使用Docker部署
|
||
|
||
基本信息如下:
|
||
1. 服务器系统 Ubuntu
|
||
2. 配置 1C1G 25G SSD磁盘
|
||
3. 服务器需要安装软件:
|
||
- Git
|
||
- Vim
|
||
|
||
|
||
# 前期准备
|
||
|
||
**安装Docker**
|
||
|
||
https://docs.docker.com/engine/install/ubuntu/
|
||
|
||
|
||
安装完成后,记得把docker设置为自启动
|
||
```
|
||
systemctl enable docker
|
||
```
|
||
|
||
|
||
# 准备Dockerfile
|
||
|
||
因为是Java程序,需要确定自己使用了哪个版本的JDK,比如我使用的是JDK8
|
||
去dockerhub 寻找合适的基础镜像
|
||
|
||
比如我使用的是openjdk
|
||
https://hub.docker.com/_/openjdk
|
||
|
||
在tag中寻找8的版本,openjdk分为两个大版本系列
|
||
jdk 完整的编译环境
|
||
jre 运行环境,体积更小
|
||
|
||
我是用的基础镜像为`openjdk:8-jre`
|
||
|
||
|
||
```Dockerfile
|
||
# 设置本镜像需要使用的基础镜像
|
||
FROM openjdk:8-jre
|
||
|
||
# 把jar包添加到镜像中
|
||
ADD ./target/md-view-2.0.0-fat.jar /app.jar
|
||
|
||
# 添加配置文件,这个项目运行时需要
|
||
ADD config.json /config.json
|
||
# 镜像暴露的端口
|
||
EXPOSE 8081
|
||
|
||
# 修改一下文件最后修改时间
|
||
RUN bash -c 'touch /app.jar'
|
||
|
||
# 容器启动命令
|
||
ENTRYPOINT ["java","-jar","/app.jar"]
|
||
|
||
# 设置时区
|
||
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
|
||
```
|
||
|
||
完整的Dockerfile如上。
|
||
|
||
# 验证Dockerfile
|
||
|
||
将项目clone下来
|
||
|
||
**Maven打包**
|
||
|
||
```
|
||
mvn clean package -DskipTests
|
||
```
|
||
|
||
**构建镜像**
|
||
注意,这里打包在项目根目录,看添加的jar文件就可以观察到需要在哪个地方开始打包
|
||
|
||
|
||
```
|
||
docker build -t md-view:1.0 .
|
||
```
|
||
|
||
**检查镜像**
|
||
|
||
```
|
||
docker run md-view:1.0
|
||
```
|
||
|
||
查看日志是否正常
|
||
|
||
|
||
# 正式启动
|
||
|
||
如上次执行的验证正常,则开始正式运行,执行后,会返回一串字符串,这个就是容器的ID
|
||
|
||
|
||
```
|
||
docker run -d -p 8081:8081 --name md-view --restart=always -v ${pwd}:/config.json md-view:1.0
|
||
```
|
||
|
||
`--restart=always` 可以让容器异常停止时,自动启动,但是这个命令只能代表容器在运行,如容器假死,或者由于某些原因导致响应缓慢,则无法处理
|
||
|
||
如需使用真正的健康检查,需要在Dockerfile中加入健康检查指令,或者使用docker-compose
|
||
|
||
|
||
启动后,查看日志
|
||
|
||
```
|
||
docker logs -f 容器ID
|
||
```
|
||
|
||
# 其他
|
||
|
||
因为每次操作docker都需要ssh远程进机器,我一般使用 portainer 将docker操作web化,这样可以在浏览器操作docker
|
||
|
||
|
||
|
||
|
||
|
||
|