使用 Docker 部署 Java 项目(通俗易懂)

目录

[1、下载与配置 Docker](#1、下载与配置 Docker)

[1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同)](#1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同))

[1.2 配置 Docker 代理对象](#1.2 配置 Docker 代理对象)

[2、打包当前 Java 项目](#2、打包当前 Java 项目)

[3、进行编写 DockerFile,并将对应文件传输到 Linux 中](#3、进行编写 DockerFile,并将对应文件传输到 Linux 中)

[3.1 编写 dockerfile 文件](#3.1 编写 dockerfile 文件)

[3.2 使用 WinSCP 进行两端的文件传输](#3.2 使用 WinSCP 进行两端的文件传输)

4、进行创建镜像,运行容器,并加入到同一网络中

[4.1 创建镜像](#4.1 创建镜像)

[4.2 运行容器](#4.2 运行容器)

[4.3 统一网络](#4.3 统一网络)

[4.4 使用 DockerCompose 进行部署项目(自行了解)](#4.4 使用 DockerCompose 进行部署项目(自行了解))

5、测试当前项目的接口,是否能正确访问


docker 部署 java 项目

前言:

📜置顶有 Docker 的最全最易懂的配套 pdf 文件

搜索镜像的网站(推荐):Docker DocsDocker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.https://docs.docker.com/

1、下载与配置 Docker

1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同)

以下命令,默认不是 root 用户操作,若是,可去除 sudo 命令前缀

更新软件包索引:

java 复制代码
sudo apt update

安装必要的依赖项(如果需要的话):

bash 复制代码
sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加Docker的官方GPG密钥(如果从官方仓库安装):

bash 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置Docker的稳定版仓库:

bash 复制代码
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再次更新软件包索引:

bash 复制代码
sudo apt update

安装Docker CE:

bash 复制代码
sudo apt install docker-ce docker-ce-cli containerd.io

验证安装:

bash 复制代码
sudo docker --version

启动Docker服务:

bash 复制代码
sudo systemctl start docker

设置Docker开机自启动(可选):

bash 复制代码
sudo systemctl enable docker

1.2 配置 Docker 代理对象

回到 ~ 主目录,进入**/etc/docker/daemon.json****配置文件,vim 将以下高亮的信息填入其中**

bash 复制代码
# 将内容写入 /etc/docker/daemon.json 文件,root 用户可以去掉 sudo
# 配置 Docker 镜像,使用多个镜像源来提高镜像下载速度
echo '{
  "registry-mirrors": [
    "https://proxy.1panel.live",
    "https://docker.1ms.run",
    "https://docker.ketches.cn"
  ]
}' | sudo tee /etc/docker/daemon.json


# 重启 Docker 服务以使配置生效
sudo systemctl restart docker

2、打包当前 Java 项目

在 maven 中,先 clean 后 package 打包

这样,就能得到项目中对应模块的 .jar 包


3、进行编写 DockerFile,并将对应文件传输到 Linux 中

Window 和 Linux 之间的文件传输软件下载地址:

文件传输工具WinSCP下载安装教程_winscp安装教程-CSDN博客https://blog.csdn.net/qq_26383975/article/details/120220823

3.1 编写 dockerfile 文件

bash 复制代码
FROM openjdk:17-jdk

ARG APP_PATH=/opt

WORKDIR $APP_PATH

# Copy Application
COPY auth.jar $APP_PATH/auth.jar
RUN mkdir logs

ENV JAVA_OPTS="-Xms512m -Xmx512m -XX:-HeapDumpOnOutOfMemoryError" \
    SPRING_PROFILES_ACTIVE=local

EXPOSE 9313

# 指定docker容器启动时运行jar包
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xmx768m","-jar","/opt/data-annotation.jar","--spring.profiles.active=dev"]
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /opt/auth.jar

以上文件大致结构解释(其他以外的配置根据自己需求进行添加):

3.2 使用 WinSCP 进行两端的文件传输

注意:运行容器的时候尽量不要使用 root 权限的用户进行操作,减少安全风险

在此之前,若以 root 的身份进行操作文件传输软件,需要先启用 ssh 权限:

在 Ubuntu 中启用 root 用户的远程登录权限_ubuntu root远程登录-CSDN博客https://blog.csdn.net/heromps/article/details/144549653然后进行切换到 root 用户,并更改密码:

新安装的Ubuntu系统中默认的root用户密码是多少,怎么修改?_ubuntu22.04默认密码-CSDN博客https://blog.csdn.net/Dreamhai/article/details/109764502在 WinSCP 中以 root 进行登录:

传输相关文件,并根据 dockerfile 信息,将其 .jar 包与 dockerfile 建立在同一个目录下:


4、进行创建镜像,运行容器,并加入到同一网络中

4.1 创建镜像

根据 dockerfile 创建对应的镜像,这里是在 auth 目录下进行创建(命令最后的 . 是表示当前目前下,不能省略)

bash 复制代码
docker build -t auth:1.0 -f Dockerfile-auth .

陆续将其他模块的镜像给创建好:

4.2 运行容器

这里是运行 anth 模块的容器

bash 复制代码
docker run -d -p 9313:9313 --name exam_auth 3ddbf5bc0dae

陆续将其他模块的容器运行起来:

4.3 统一网络

若当前 docker 中没有自定义网络,可以创建一个,这里我已经创建了

bash 复制代码
docker network create [OPTIONS] NETWORK_NAME

然后将这些容器依次加入到这个自定义的网络中

前者 exam_net 是当前的网络名,后者是需要加入进来的容器名

bash 复制代码
docker network connect exam_net exam_auth

查看当前网络中的容器是否都加入了进来

inspect 后面填入当前的网络 ID或名称

bash 复制代码
docker network inspect bea8eac2916b

4.4 使用 DockerCompose 进行部署项目(自行了解)

**前提:**目前流行这种做法,因为更加简便,不用像上面 4.1、4.2、4.3 繁琐

使用Docker和DockerCompose进行java项目部署_dockercompose部署java项目-CSDN博客https://blog.csdn.net/qq_45854695/article/details/139643245

可以在一个 compose 中配置多个容器的信息(当然,使用 compose 的话其他的 dockerfile 内容也是要有一定变化的,毕竟前者可以简化后者),之后只需要运行一行命令即可容器创建、运行并统一网络

bash 复制代码
docker-compose -f docker-compose-dev.yml up -d

5、测试当前项目的接口,是否能正确访问

前提:

在测试接口前,需要保证打包前原项目中的 .yml 文件中 local 的 ip (这里mysql 和 redis 等一些 ip 看情况进行更改)是否设置为当前服务器的 ip ,如果 ip 不一致,之前进行打包的 .jar 包进行访问时会失败

先查看对应服务的日志,查看是否正常运行

bash 复制代码
docker logs [OPTIONS] CONTAINER

这里使用 Apipost 进行访问 auth 登录接口,可见接口访问成功,即项目已部署成功(这里的 ip 是服务器的 ip,而端口是项目对应服务的端口)

相关推荐
SoFlu软件机器人5 分钟前
智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
java·开发语言·架构
gsls20080837 分钟前
ocrapi服务docker镜像使用
运维·docker·容器
写bug写bug1 小时前
如何正确地对接口进行防御式编程
java·后端·代码规范
Cyanto1 小时前
Java并发编程面试题
java·开发语言·面试
在未来等你1 小时前
互联网大厂Java求职面试:AI大模型与云原生技术的深度融合
java·云原生·kubernetes·生成式ai·向量数据库·ai大模型·面试场景
sss191s2 小时前
Java 集合面试题从数据结构到 HashMap 源码剖析详解及常见考点梳理
java·开发语言·数据结构
爱宇阳2 小时前
使用 Docker Compose 从零部署 TeamCity + PostgreSQL(详细新手教程)
docker·postgresql·容器
whp4042 小时前
windows server2019 不成功的部署docker经历
运维·docker·容器
LI JS@你猜啊2 小时前
window安装docker
java·spring cloud·eureka