^-^
Docker部署Java项目

一、前言

记录一下前几天部署项目的过程。
用Docker部署Java项目最主要的问题就是Dockerfile的编写。

Docker简介

Docker 是一种开源的容器化平台,可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,从而实现轻量级、可移植和自包含的部署。Docker官网

二、基本流程

1、服务器的环境准备
2、项目打包
3、编写Dockerfile文件
4、使用Dockerfile文件构建项目镜像
5、运行镜像

三、操作展示

1、环境准备

把名为mountains的项目部署到服务器上

项目需要的环境:

  • JDK 17.0
  • MySQL 8.3.0
  • Redis 7.2.4
  • Nginx 部署前端

服务器当前的环境:

  • CentOS 7.8
  • yum 3.4.3

1、首先安装并启动Docker

1
2
3
4
5
6
7
8
#安装Docker
yum install docker

#运行Docker
systemctl start docker

#查看Docker版本
docker -v

2、下载MySQL、Redis和Ngxin镜像并运行容器,以MySQL为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#1、下载MySQL8.3.0版本的镜像
docker pull mysql:8.3.0
#查看已下载的Docker镜像
docker images

#2、通过命令运行容器
docker run -d \
--name mysql \
-p 3306:3306 \
-e Tz=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD="MySQL登录密码" \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/init:/docker-entrypoint-initdb.d \
mysql:8.3.0

#-d: 这个参数表示在后台运行容器。
#--name mysql: 设置容器的名称为"mysql"
#-p 3306:3306: 端口映射,后一个为容器内,前一个为容器外
#-e Tz=Asia/Shanghai: 设置容器的时区
#-v 数据挂载,冒号后的是容器内目录,冒号前是容器外目录
#指定容器和版本

#查看正在运行的容器
docker ps

3、设置Docker网络
Docker内的容器不在同一网络是没法互联的

1
2
3
4
5
6
7
8
9
10
11
12
13
#1、创建一个网络prd
docker network create prd

#查看所有网络
docker network ls

#2、使指定mysql容器连接加入网络prd
#docker network connect [网络名] [容器名]
docker network connect prd mysql

#3、查看网络详情
docker network inspect prd

2、项目打包

将项目打成jar包

3、编写Dockerfile文件

新建一个名为“Dockerfile”的文件,无后缀。
编写Dockerfile的文档地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#基础镜像
FROM openjdk:17
#设定时区
ENV Tz=Asia/Shanghai
#设置环境变量Tz,为上海时区
RUN ln -snf /usr/share/zoneinfo/$Tz /etc/localtime && echo $Tz >/etc/timezone
#1、“RUN”
#Dockerfile中的指令,在构建镜像时执行。
#2、“ln -snf /usr/share/zoneinfo/$Tz
#ln命令用于创建符号链接(symbolic link
#-s:表示创建符号链接 -n:表示若存在同名的符号链接文件时不覆盖,即不创建新的符号链接-f:强制执行
#/usr/share/zoneinfo/$Tz: 源文件的路径,$Tz是上面的变量,用于表示用户指定的时区信息。
#3、“echo $Tz >/etc/timezone”
#将用户指定的时区信息写入/etc/timezone文件中
#使系统在启动时能够正确识别时区,确保容器中程序在使用时间相关功能时能够正确地将时间转换为指定的时区。

#拷贝jar包
COPY mountains.jar /app.jar
#将本地主机上的 mountains.jar 文件复制到 Docker 镜像内的 /app.jar 路径下。
#入口
ENTRYPOINT ["java","-jar","/app.jar"]
#指定容器启动时要执行的命令,即“在容器内执行 java -jar /app.jar 命令”

4、使用Dockerfile文件构建项目镜像

1、将jar包和Dockerfile文件上传到服务器,放于同一目录下
2、输入命令构建镜像

1
2
#docker build -t 镜像名[:版本号] [创建目录]
docker build -t mountains:2.0 .

5、运行镜像

1
2
3
4
5
docker run -d \
--name mountains \
-p 9001:9001 \
--network dev \
mountains:2.0

查看日志

1
docker logs -f mountains

参考链接

Docker官网:https://www.docker.com/
Dockerfile编写文档:https://docs.docker.com/reference/dockerfile/