当前位置: 首页 > news >正文

在Linux系统上使用Docker部署java项目

一.使用Docker部署的好处:

在Linux系统上使用Docker部署项目通常会大大简化部署流程,因为Docker可以将应用程序及其依赖打包到一个独立的容器中

Docker打包应用程序时会将其与所有依赖项(操作系统、库等)一起打包。这样,无论应用程序在开发、测试还是生产环境中运行,都会有一致的运行环境

由于容器与主机操作系统隔离,Docker容器可以在任何支持Docker的平台上运行,不论是本地开发环境、测试服务器还是云平台。

总而言之,Docker通过容器化技术,提供了一种简化的、一致性的部署方式,解决了依赖冲突、环境差异、扩展性等传统部署方式中的痛点。这使得它在现代应用开发和部署中得到了广泛应用,尤其是在云计算和微服务架构中发挥着关键作用。

二.Docker部署的步骤:

1.准备工作:

在部署前,我们需要Dockerfile以及jar包(MySQL放在Linux就需要再项目配置文件的数据库架构名改成虚拟机的IP以及密码需改成Linux内的mysql密码)。

Dockerfile 是定义如何构建 Docker 镜像的蓝图,而 Docker 是用于构建、运行和管理这些镜像及其容器的工具。

我们需要先创建Dockerfile,就像需要一个网卡驱动程序来确保计算机能够与网络进行通信一样,需要一个 Dockerfile 来定义如何构建我们的 Docker 镜像。Dockerfile 是 Docker 镜像的“驱动程序”。就像下面这样定义一个Dockerfile文件,然后将这个和jar包拖动到Linux系统的 /root/ 目录下。

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

2.构建镜像:

就像将网卡插入计算机来实现网络连接一样,你需要构建 Docker 镜像来创建运行你的应用程序的“容器”。

docker build -t my-java-app .

-t my-java-app 是为镜像指定的名称,.表示当前目录(Dockerfile 在这里)。

构建完镜像(image)后,我们可以使用下面的命令查看镜像是否创建成功:

docker image ls
//或
docker images

3.创建自定义网络:

 自定义网络使得容器可以更好地互相通信,并提供额外的网络隔离和配置选项。

(1)创建自定义网络:

docker network create --driver bridge my_custom_network

这里的 --driver bridge 指定使用桥接网络驱动(这是 Docker 的默认网络驱动)。my_custom_network 是你自定义的网络名称,可以根据需要更改。 

(2)查看自定义网络:

docker network ls

(3)连接自定义网络:

docker network connect my_custom_network mysql

 这里的 mysql 指一个正在运行的容器的名称或 ID。这个命令的作用是将现有的容器(在这个例子中是 mysql 容器)连接到一个自定义网络(my_custom_network)。

我们可以使用 docker ps 命令查看正在运行的容器。

(4)删除自定义网络:

docker network rm my_custom_network

4.创建并运行容器:

网卡需要网络配置才能正确工作,同样 Docker 容器也需要网络配置。我们可以通过 docker run 命令启动容器,并指定如何将容器的端口映射到宿主机的端口。

docker run -d --name my-running-app --network hmall -p 8080:8080 my-java-app

这里的 -d 参数表示在后台运行容器,--network hmall将容器连接到名为 hmall 的自定义网络(必须先创建才能使用自定义网络)-p 8080:8080 将容器的端口 8080 映射到宿主机的端口 8080,--name my-running-app 给容器指定一个名称,my-java-app 是你之前创建的镜像名称。

为了判断是否运行成功,我们可以使用下面命令查看容器运行日志:

http://www.lryc.cn/news/438558.html

相关文章:

  • 【C++】标准库IO查漏补缺
  • python简单易懂的lxml读取HTML节点及常用操作方法
  • Java | Leetcode Java题解之第406题根据身高重建队列
  • 安卓获取apk的公钥,用于申请app备案等
  • 【leetcode_python】杨辉三角
  • Parallels Desktop 20 for Mac中文版发布了?会哪些新功能
  • SpringBoot整合SSE-灵活管控连接
  • 挖矿木马-Linux
  • 【leetcode——415场周赛】——python前两题
  • 【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)
  • ZYNQ LWIP(RAW API) TCP函数学习
  • Spring Boot,在应用程序启动后执行某些 SQL 语句
  • 【SQL】百题计划:SQL最基本的判断和查询。
  • 04_Python数据类型_列表
  • F5设备绑定EIP
  • 使用 PyCharm 新建 Python 项目详解
  • 从0开始学习 RocketMQ:分布式事务消息的实现
  • MySQL 查询数据库的数据总量
  • [C++]——vector
  • 自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)
  • 随想录笔记-二叉树练习题
  • 华雁智科前端面试题
  • 【iOS】单例模式
  • Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉
  • 递归的时间复杂度分析
  • C++: 二叉树进阶面试题
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册
  • Pytorch详解-数据模块
  • 浅谈openresty
  • 【学习笔记】2024最新版SpringCloud教程