部署java项目,每个人的java项目不一样,我们要自定义一个镜像,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成。
自定义一个镜像大概流程:
准备一个linux服务(CentOS或者Ubuntu均可)
安装并配置JDK
上传Jar包
运行jar包
所以我们自定义镜像流程:
准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)
安装并配置JDK
拷贝jar包
配置启动脚本
由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可,而这种记录镜像结构的文件就称为Dockerfile,其对应的语法可以参考官方文档
Dockerfile reference | Docker Docs
例如,要基于Ubuntu镜像来构建一个Java应用,其Dockerfile内容如下
Dockerfile的文件名就是? ?Dockerfile 全名就是这个没有什么后缀
新建一个Dockerfile文件
里面内容如下
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
FROM openjdk:11.0-jre-buster? ?//表示基础镜像,里面有Ubuntu镜像跟jdk环境,jdk11,你可改
jdk的版本,要jdk8版本的,就把改成? ?FROM openjdk:8-jre-buster ,要jdk17就改成
FROM openjdk:17-jre-buster??
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone? ? ?//表示是设定时区的,照着写就行了
COPY docker-demo.jar /app.jar? ? ? ? ?//表示复制jar包?, docker-demo.jar是你打包好的后端工程jar包的路径文件,假如你把jar包放在虚拟机中的根目录root目录中,你可以像我一样只写文件名,你也可以写路径名,??COPY /root/docker-demo.jar /app.jar
/app.jar? 表示把虚拟机的jar包复制在创建的容器中的 /app.jar 中
ENTRYPOINT ["java", "-jar", "/app.jar"]? ?//表示是入口文件,容器创键会同时执行的命令
是我们平常用命令行启动jar包的命令? ?,后端工程默认端口是8080,你可以增加参数修改端口号
ENTRYPOINT ["java", "-jar", "-Dserver.port=8090"?,"/app.jar"]? ? ?修改后端工程的端口号是8090
准备好Dockerfile文件后,开始构建镜像
先进入Dckerfile文件存放的目录 ,我的Dockerfile文件存放在/root/demo? 中
进入目录,构建镜像
# 进入镜像目录
cd /root/demo
# 开始构建
docker build -t docker-demo:1.0 .
docker build
: 就是构建一个docker镜像
-t docker-demo:1.0
:-t
参数是指定镜像的名称(repository
和tag
)冒号后面不写,默认版本是latest
.
? : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.
代表当前目录,也可以直接指定Dockerfile目录
docker build -t docker-demo:1.0 /root/demo
构建完后查看镜像列表?
输入命令? ?docker images? ?查看镜像列表
镜像创建成功
创建完后端工程的镜像开始创建容器
# 1.创建并运行容器
docker run -d \
--name dd \
-p 8090:8090 \
docker-demo:1.0
run? //表示创建容器
-d? ?//表示创建容器并在后台运行,容器创建成功会自动运行
\? ? //表示转行
--name dd? ? //表示创建容器的名字
-p? ?//表示映射的端口,访问虚拟机的8080号端口等于访问容器的8080号端口,后端工程默认的端口是8080号。你可以在入口命令添加参数中修改
docker-demo:1.0? ?//表示镜像名
创建完后输入命令查看容器
docker ps? ?可以查看创建的容器??
之后想启动容器执行命令
docker start dd
dd表示是容器名
至此,docker部署后端工程就完成了,谢谢你的观看