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