您现在的位置是:首页 >技术杂谈 >使用Docker打包并运行jar包网站首页技术杂谈

使用Docker打包并运行jar包

KKKkkkkkkk.kk 2023-05-12 20:05:56
简介因为前一段时间换了个个人搭建的博客,所以docker的相关使用命令都放在了那篇博客里,等过段时间挪过来,在这里简单介绍一下dockerDocker分为镜像、容器,一般来说镜像就是一个删减版的Linux系统,而容器就是我们在Docker中跑这个镜像,类似于Windows重装系统,只不过Linux一条命令就可以搞定Docker中一个镜像可以启动多个容器,但是要启动一个容器,必须要有它的镜像,因此我们经常使用来从Docker仓库拉取镜像,然后来启动它,启动后的景象称为容器查看所有镜像docker rmi。

使用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这一个英文单词,而不是任何数字)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。