springboot项目构建为docker镜像
一、打包springboot项目为jar
idea右侧通过maven package打包为jar
二、编写Dockerfile文件
内容如下:
#基于jdk17镜像构建,openjdk是开源的,所以镜像有很多种,可以换成其他的
FROM amazoncorretto:17
#构建时更新软件,并且安装vim和网络工具,这一步非必须,但是很多docker镜像内是没有vim的,建议安装,可能要根据不同基础镜像调整安装命令
RUN yum update && yum install -y vim net-tools
#将target目录下的jar包拷贝到容器内的root目录下
COPY target/*.jar /root/app.jar
#程序启动时的命令,可以被外部替代
CMD ["--server.port=8080"]
#将8080端口暴露出去,宿主机才可以进行映射
EXPOSE 8080
#程序启动时的命令,不可被替代
ENTRYPOINT ["java","-jar","/root/app.jar"]
三、构建镜像
构建语句格式如下:
docker build 镜像名:标记 .
注意:最后一个小数点表示当前目录下寻找Dockerfile文件,如果不写:标记,则表示latest。
下面是我的构建语句,成功打包了一个demo:1.0的镜像。
docker build -t demo:1.0 .
四、使用镜像
docker run -itd --name test -p 8080:8080 demo:1.0
使用刚才的镜像创建了一个名为test的容器,并且把容器内部端口8080映射到宿主机8080上。
五、CMD和ENTRYPOINT的区别
两者都可提供容器内程序启动时的命令,但是有些许区别。
CMD提供的命令可以被我们创建容器时传入的参数替换,因此CMD常用来提供默认参数。
例如,我们再使用下面的语句创建一个新的容器:
docker run --name t1 -p 8081:8081 demo:1.0 --server.port=8081
此时容器内部将会使用我们传入的8081端口替换掉前面Dockerfile文件中配置的8080。
而ENTRYPOINT却无法进行替换。
评论区