springboot程序制作docker镜像部署
前置知识:Dockerfile是什么
Dockerfile 是用于构建 Docker 镜像的文本文件,其中包含了一系列的指令和配置,描述了如何组装一个完整的容器环境。通过 Dockerfile,开发者可以定义容器的基础操作系统、软件包安装、环境变量、启动命令等方面的设置,最终形成一个可重复构建和部署的容器镜像。
Dockerfile 常用的指令及其作用:
-
FROM: 指定基础镜像,定义了构建过程的起点。
FROM ubuntu:20.04
-
LABEL: 添加元数据,提供关于镜像的信息。
LABEL maintainer="your-name"
-
RUN: 在镜像中运行命令,用于安装软件包、更新系统等。
RUN apt-get update && apt-get install -y curl
-
WORKDIR: 设置工作目录,指定后续命令的运行路径。
WORKDIR /app
-
COPY/ADD: 复制文件或目录到容器中。
COPY ./src /app
-
ENV: 设置环境变量。
ENV PATH="/usr/local/bin:${PATH}" \ JAVA_HOME="/usr/local/java"
-
EXPOSE: 暴露容器运行时的端口。
EXPOSE 8080
-
CMD: 容器启动时执行的默认命令,可以被覆盖。
CMD ["npm", "start"]
-
ENTRYPOINT: 容器启动时执行的命令,与 CMD 结合使用,可接受命令行参数。
ENTRYPOINT ["java", "-jar", "app.jar"] CMD ["--server.port=8080"]
-
VOLUME: 创建挂载点,用于持久化存储。
VOLUME /data
-
USER: 指定运行容器时的用户名或 UID。
USER appuser
Docker 根据 Dockerfile 中的指令逐步构建镜像,每个指令都会创建一个新的镜像层。这样的分层设计使得镜像的复用、缓存和传输更加高效。通过 Dockerfile,开发者可以定义容器的构建规则,实现可移植、可复制的容器环境。
制作镜像的流程是什么
在项目中创建Dockerfile文件
以这个项目为例,Dockerfile创建的位置就是在项目的根目录下,和pom.xml文件同级。
Dockerfile文件内容需要什么
- 需要java环境,这里选择的就是java8
- 设置你项目在镜像里的工作路径,也就是你程序存放的路径
- 将你的程序复制到镜像内部
- 挂载配置文件和日志到宿主机
- 启动容器时就要启动你的程序,所以要设置默认启动命令
#基于java8镜像
FROM java:8
# 设置工作目录
WORKDIR /app
#复制jar包和配置文件到镜像内部
COPY es-1.0.0.jar /app/es.jar
COPY application.yml /app/application.yml
#这表示创建了一个在宿主机上的挂载点,容器内的数据会持久化到宿主机的这个目录下
VOLUME /app
#容器启动时就执行的命令,后面的表示读取文件
CMD ["java","-jar","/app/es.jar","--spring.config.location=/app/application.yml"]
利用Maven打包项目
将程序打包成jar包、application.yml和Dockerfile一同上传至服务器,比如存放在/app目录下
制作镜像
执行制作镜像命令
#es-image是镜像的名字,v1.0是镜像的标签也就是版本,最后的‘.’表示Dockerfile的位置就在当前目录,如果你的不在当前目录你就写你的Dockerfile所在的目录
docker build -t es-image:v1.0 .
启动容器
#指定端口、挂载宿主机配置文件和日志
docker run -d -p 30000:30000 \
-v /app/application.yml:/app/application.yml \
-v /app/logs:/app/logs \
--name es es-image:v1.0
docker ps
程序正常运行
tail -fn 100 info.log
日志正常打印
至此镜像制作完成