第一步:在项目根目录下创建docker文件夹,并在文件夹下新建Dockerfile文件
文件目录:
docker/Dockerfile
Dockerfile文件内容:
FROM openjdk:8-jdk-slim
COPY ./build/libs/jvmpoc-0.0.1-SNAPSHOT.jar jvmpoc.jar
ENTRYPOINT exec java -jar jvmpoc.jar
EXPOSE 8080
至于Dockerfile文件怎么写,可以参考:https://www.runoob.com/docker/docker-dockerfile.html
第二步:把项目的jar包build出来
我项目构建用的gradle,所以build用
gradlew build
build成功后,在项目的build/lib下可以找到build出来的jar包,jvmpoc-0.0.1-SNAPSHOT.jar
build/lib/jvmpoc-0.0.1-SNAPSHOT.jar
第三步:想办法把项目弄到ubuntu里。
因为我是在Windows上装的virtualbox跑的ubuntu,所以用sharefolder的方式把Windows上我项目的目录挂载到ubuntu里,以让ubuntu可以访问项目目录。sharefolder操作参考: https://blog.csdn.net/skylake_/article/details/53132499
第四步:build docker image
在ubuntu里,进入项目的跟目录,执行:
docker build -f ./docker/Dockerfile -t jvmpoc:0.1 .
注意:这里的最后一个.是不能少的,它代表上下文路径,对它的解析:
这里jvmpoc是image的名字,:后面的0.1是image的tag。
https://www.runoob.com/docker/docker-dockerfile.html
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
----从这里看,我们其实应该新建一个文件夹,里面就放jar包和Dockerfile文件,然后build docker image,这样就不会造成过多的缓存。
build docker image成功后我们用docker image ls命令可以看到build出来的docker image,
第五步:根据image创建docker container
执行命令:
docker run --name yuker_jvmpoc -p 8080:8080 jvmpoc:0.1
--name 代表这个container的名字;
-p 是端口转发;
jvmpoc:0.1是image的名字+tag号
这里要注意一点,image名字+tag号这部分要放最后,之前我放在最前面,导致后面--name和-p都不生效。
网友评论