一、首先编写dockerfile
# 使用官方OpenJDK镜像作为基础镜像,这里选择了一个轻量级的版本,比如OpenJDK 11的slim版本
# 实际应用中选择自己开发配套的jdk
FROM openjdk:11-jre-slim
# 设置维护者信息
LABEL maintainer="作者名称"
# 设置工作目录。容器启动后会自动进入该目录
WORKDIR /app
# 将目标jar文件复制到容器的/app目录下。例如,假设你的jar名为myapp.jar。
# 第一个myapp.jar指的是你的主机上的文件路径,第二个/app/myapp.jar是容器内的路径。
COPY ./myapp.jar /app/myapp.jar
# 告诉Docker在容器启动时需要监听哪个端口。这个不会使端口在宿主上自动打开,但是对于文档化和在使用Docker run时指定-p参数是有帮助的。
EXPOSE 8080
# 定义容器启动时执行的命令。这里使用java -jar运行你的应用。
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
二、准备jar文件把jar文件放在跟dockerfile同一目录下,执行:
docker build -t <镜像名称>:<版本号> .
将镜像名称及版本号替换成你自己的
注意:最后的点是需要的,代表当前目录,这告诉 Docker 在当前目录查找 Dockerfile
构建完成后,你可以使用以下命令来查看本地的镜像列表,确认你的镜像是否已经成功构建:
docker images
三、运行 Docker 镜像,启动一个容器实例
docker run -p 8082:8082 --name <容器名称> -v <物理卷路径>:<逻辑卷路径> -d <镜像id>
-
-p 8082:8082
: 这个参数告诉 Docker 将容器内的 8082 端口映射到宿主机的 8082 端口上。这样做可以使得外部请求通过宿主机的 8082 端口访问到容器中运行的服务。 -
--name <容器名称>
: 这个参数为即将运行的容器设置了一个名称,容器名称是唯一的,使用容器名称可以更方便地管理容器,例如停止或删除容器时。 -
-v <物理卷路径>:<逻辑卷路径>
: 这个参数指定了一个卷映射,它将宿主机上的<物理卷路径>
目录映射到容器内的<逻辑卷路径>
目录。这意味着容器内对<逻辑卷路径>
的任何读写操作都会反映到宿主机的相应目录上,反之亦然。这对于数据持久化和数据共享来说非常有用。比如说:一些静态资源没有放到OSS的时候需要把路径映射出来不然每次重启容器的时候静态资源会丢失,若不需要可以删除-v <物理卷路径>:<逻辑卷路径>
-
-d
: 这个参数告诉 Docker 在后台运行容器,即以守护进程模式启动。当容器启动后,你将立即回到命令提示符,而容器会在后台运行。 -
<镜像id>
: 这是你想要启动的 Docker 镜像的 ID。
综上所述,这条命令创建了一个新的容器,该容器具有指定的名称、端口映射、数据卷映射,并且在后台运行。这样设置可以让容器服务通过指定的端口对外提供服务,同时保证特定目录的数据持久化。