使用Docker打包并运行jar包

news/2024/11/8 21:04:36/

使用Docker打包jar

因为前一段时间换了个个人搭建的博客,所以docker的相关使用命令都放在了那篇博客里,等过段时间挪过来,在这里简单介绍一下docker

Docker分为镜像、容器,一般来说镜像就是一个删减版的Linux系统,而容器就是我们在Docker中跑这个镜像,类似于Windows重装系统,只不过Linux一条命令就可以搞定
Docker中一个镜像可以启动多个容器,但是要启动一个容器,必须要有它的镜像,因此我们经常使用docker pull MirrorName:version来从Docker仓库拉取镜像,然后docker run ...来启动它,启动后的景象称为容器

以下是一些常用命令:
docker images查看所有镜像
docker rmi删除一个镜像
docker run -d --name ....... 作为容器启动一个镜像
docker ps -a查看所有容器
docker start 镜像名称/镜像ID 启动一个镜像(Docker的容器或镜像ID很长,因此可以不写全,比如所有的容器id都是z开头,而我要删除的是a开头,我就可以docker rm a,只要能区分开来就可以)
docker stop 镜像名称/镜像ID 停止一个镜像
docker rm 镜像名称/镜像ID 删除一个镜像

使用Docker打包.jar文档

使用你喜欢的文档编辑工具,创建一个名为dockerfile的文档,注意:文档名随意,但是一定要全部小写
在文档中写入以下内容:

FROM openjdk:8 #环境依赖
MAINTAINER jimx #创建者(我的用户名)
EXPOSE 8080 # 暴露8080端口,这是容器的接口,不是电脑的接口,run的时候可以做映射
ADD hello.jar /app.jar # jar包位置,前面的是我们的jar包,后面是容器中的jar包,后方的名称与最下面一行的方括号中保持一致即可
VOLUME /tmp # 挂载目录
ENTRYPOINT ["java","-jar","/app.jar"] # 启动命令

打包命令

以下两个命令都可以进行打包,第一条命令打包结束后镜像名称==你刚才创建的文件名称,第二条命令相当于重新命名了镜像名称
注意:第二条命令中的helloworld:1.0,冒号之前是打包后的镜像名称,冒号之后是打包之后的版本号,而-f参数后面的hello是刚才创建的dockerfile文档,最后一个.代表当前目录(存放dockerfile文件的目录)

docker build -t hello:1.0 .   # 打包后镜像名称就是dockerfile的名称,版本是1.0
docker build -t helloworld:1.0 -f hello . # 打包后的名称为`helloworld`,版本也是1.0

我用上面第二条命令进行打包,打包结束之后获得一个名为helloworld版本是1.0的镜像,可以使用docker images命令进行查看:

> docker images # 以下为输出结果:
# REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
# helloworld   1.0       014b6ea22041   29 minutes ago   544MB

启动容器

随后使用下面的命令启动容器:

docker run -d --name hellow2 --net=host -p 8080:8080 helloworld:1.0

这个命令包含-d后台运行、-name为容器命名、--net网络配置、-p端口映射(容器端口与主机端口,容器端口就是刚才在dockerfile中定义的EXPOSE)、镜像名称:镜像版本。

注意:最好指定以下版本号,否则默认查找最新版(latest版本),但是刚才我们打包的时候给了版本号1.0,所以会报错找不到这个(并不是说数字最大的就是最新的,而是最新的版本的版本号就是latest这一个英文单词,而不是任何数字)


http://www.ppmy.cn/news/40525.html

相关文章

容器编排部署

一、概述 容器编排部署的作用: 实现复杂容器应用架构之间的互联,减少大量容器部署的成本 Docker"三剑客"编排部署 工具︰ docker machine 用于创建和管理docker host docker compose 通过一个文件定义复杂的容器应用之间的关系 容器与容…

10 个高级 Python 面试问题

随着 Python 最近变得越来越流行,你们中的许多人可能正在接受与 Python 打交道的技术面试。在这篇文章中,我将列出十个高级 Python 面试问题和答案。 这些内容可能会令人困惑,并且针对的是中级开发人员,他们需要对 Python 作为一…

个人-计算机操作系统第四章

第四章 存储器管理 一、章节习题 1、在下列存储管理方案中,不适应于多道程序设计的是________。 A 单一连续区分配 B 固定式分区分配 C 可变式分区分配 D 段页式存储管理 2、在可变分区存储管理方案中需要一对界地址寄存器,其中________作…

工程管理系统软件 自主研发,工程行业适用

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…

R -- 方差分析实战部分

brief 在生物统计学中有对应的纯理论部分,这里也有部分理论知识可以稍微了解一下。 术语速成部分 单因素组间方差分析 单因素组内分析 双因素混合模型 协方差分析和多元方差分析 R中的aov函数 需要注意的是car包的Anova()函数与标准anova()函数有细微区别&#x…

常用环境部署(七)——Docker安装RocketMQ

1、创建namesrv服务 (1)拉取镜像 docker pull rocketmqinc/rocketmq(2)创建一个数据目录 即创建一个namesrv数据存储路径 mkdir -p /docker/rocketmq/nameserver/logs /docker/rocketmq/nameserver/store(3&#x…

ROBOMASTER机甲大师赛视觉组学习方案2023更新第一版

ROBOMASTER机甲大师赛视觉学习方案技能更新硬件平台环境配置仓库地址还在学校的时候我写 ROBOMASTER机甲大师赛视觉组学习方案这篇博客,没想到两年以后还有同学会来时不时的收藏,现在工作后回过头再来看发现有一些东西比较旧了所以更新这篇博客&#xff…

企业IM即时通讯软件需要具备哪些功能?

随着互联网的普及,即时通讯软件也渗透到了人们的日常生活和工作当中,而市面上的即时通讯软件现在有分为两种,一种是个人社交沟通软件,另外一种则是企业即时通讯。企业即时通讯软件是为了让企业内部方便沟通、管理及办公&#xff0…