Docker部署(5)——使用docker run命令部署运行jar项目

对于一些简单的单体项目,可以使用 docker run 命令可以直接在命令行中运行容器,无需事先构建镜像。这相较于之前使用的 dockerfile 文件来运行部署项目相当于是另外一种简单的部署方法,关于之前使用dockerfile 文件来运行部署这种方法,具体可以参考下面这篇文章:

Docker部署(1)------将jar包打成docker镜像并启动容器

首先,先将jar包和配置文件放到项目目录下。

然后直接在这个目录下运行 docker run 命令即可:

XML 复制代码
ocker run -d -p 20238:20238 --name my-container-name \
-v $(pwd):/app \
-e CONFIG_FILE=/app/application.yml \
-e CONFIG_FILE_1=/app/config1.properties \
-w /app \
dockette/jdk8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar /app/reportools-1.0.0.RELEASE.jar

运行结果如下:

关于docker命令的相关解释:

① : -v 参数,您可以将宿主机上的目录或文件挂载到容器中。在您的命令中,通过 -v 参数挂载了配置文件、模板文件和应用程序 JAR 文件到容器的相应路径。关于 -v $(pwd):/app \ 是下面代码简化后的结果:

-v /mnt/docker/files/ssexcel/config:/app/config \

-v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \

-v /mnt/docker/files/ssexcel/reportools-1.0.0.RELEASE.jar:/app/app.jar \

②:CONFIG_FILE 是一个环境变量,用于指定配置文件的路径。在给定的命令中,通过 -e CONFIG_FILE=/app/application.yml 将环境变量 CONFIG_FILE 设置为 /app/application.yml,即将应用程序的配置文件路径设置为 /app/application.yml。-e 参数用于设置容器内的环境变量。在命令中,设置了两个环境变量 CONFIG_FILE 和 CONFIG_FILE_1。

-e 是 Docker 命令行选项的一部分,用于设置容器内的环境变量。它用于在运行容器时向容器内部传递环境变量。通过使用 -e 选项,可以将键值对形式的环境变量设置为容器内的环境变量。例如,-e VAR_NAME=value 将设置一个名为 VAR_NAME 的环境变量,其值为 value。

③:-d 参数表示将容器以后台(守护进程)模式运行。这样可以让容器在后台持续运行而不阻塞终端。接下来,-p 20238:20238 参数将容器的端口 20238 映射到主机的端口 20238,这样可以通过主机上的该端口访问容器内的服务。

最后,dockette/jdk8 是指定使用的镜像名称,java -jar app.jar 是要在容器中执行的命令。

④:如果要在这个基础上加上对数据的库的容器的连接,可以使用 Docker 的网络功能来实现两个容器之间的通信,一个容器用于运行应用程序 JAR 文件,另一个容器用于运行 MySQL 服务。这样可以更好地解耦和管理应用程序和数据库。修改命令如下:

  1. 创建一个自定义网络:

    XML 复制代码
    docker network create my-network
  2. 运行 MySQL 容器,并将其连接到该网络:

    XML 复制代码
    docker run -d --name mysql-container --network my-network -p <MySQL端口>:3306 -e MYSQL_ROOT_PASSWORD=<密码> mysql:5.6

    替换 <MySQL端口><密码> 为实际的 MySQL 端口和密码。

  3. 运行应用程序容器,并将其连接到相同的网络:

    XML 复制代码
    docker run -d --name app-container --network my-network -p 20238:20238 \
    -v /mnt/docker/files/ssexcel/config:/app/config \
    -v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \
    -e CONFIG_FILE=/app/config/application.yml \
    -e CONFIG_FILE_1=/app/config/config1.properties \
    -e DB_HOST=mysql-container -e DB_PORT=<MySQL端口> \
    -v /mnt/docker/files/ssexcel/reportools-1.0.0.RELEASE.jar:/app/app.jar \
    -w /app \
    openjdk:8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar app.jar

    注意,DB_HOST 环境变量中的值为 mysql-container,这是 MySQL 容器的名称,因为它们在同一网络中,可以通过容器名称进行通信。

总结

使用 docker run 命令以及 Dockerfile 文件这两种方式部署项目之间存在以下区别:

docker run 命令:

使用 docker run 命令可以直接在命令行中运行容器,无需事先构建镜像。在命令行中提供的参数和选项定义了容器的配置和运行时行为。适用于简单的场景,不需要自定义的 Docker 镜像。

Dockerfile 文件:

使用 Dockerfile 可以定义一个自定义镜像,包含特定配置和软件包。Dockerfile 文件描述了构建镜像时步骤和指令,通过构建过程生成镜像。可以根据需求自由修改 Dockerfile 中内容,添加依赖项、配置文件等。适用于复杂的程序或项目,需要自定义镜像,并且可能需要部署到多个环境中。使用 Dockerfile 可以实现更高级容器化设置,例如添加特定的环境变量、安装所需软件包、配置网络等。此外使用 Dockerfile 还可以与 CI/CD 工具集成,实现自动的持续集成和部署。

选择使用哪种方式取决于您的具体需求和场景:

  • 如果只是简单的容器化,不需要自定义镜像,可以使用 docker run 命令。
  • 如果项目较为复杂,涉及多个组件和配置,或者需要在不同环境中部署,建议使用 Dockerfile 构建自定义镜像。这样可以更好地管理和复用代码,并确保在不同环境中的一致性。

总之,docker run 命令适用于简单的容器运行,而 Dockerfile 适用于构建自定义镜像和管理复杂的项目或应用程序。选择使用哪种方式根据您的具体需求和项目复杂性来决定。

相关推荐
2401_8576226624 分钟前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_8575893628 分钟前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没2 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
雪域迷影2 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
福大大架构师每日一题3 小时前
22.1 k8s不同role级别的服务发现
容器·kubernetes·服务发现
韩楚风3 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
莹雨潇潇3 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
杨哥带你写代码3 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端