运维|devops|docker|dockerfile入门
dockerfile用处
dockerfile是一个文本的配置文件,它可以快速创建自定义的镜像
基础四步骤
- 四步
文本格式包含基础镜像FROM
维护者MAINTAINER
操作指令ADD
容器启动后指令
- eg
#1.基础镜像:FROM指令:基础镜像名:tag,例如java:8
FROM java:8
#2.维护者:格式:MAINTAINER <name>
MAINTAINER jackly
#3.镜像的操作指令
# ADD拷贝一个文件到容器中,格式:ADD <src> <dest>
ADD eureka-server-0.0.1-SNAPSHOT.jar /app/service/eureka/data/app.jar
#告诉docker容器暴露端口,在容器启动的时候,需要通过-p 做端口映射
EXPOSE 8761
#5.配置容器启动后,执行什么命令
ENTRYPOINT ["java","-jar","/app/service/eureka/data/app.jar"]
编写Dockerfile
| 指令 | 作用 | 示例 |
|---|---|---|
FROM | 指定基础镜像,一切构建从此开始,比如选择一个带JDK的镜像 | FROM openjdk:17-jre-slim |
WORKDIR | 设置工作目录,后续的COPY、RUN、CMD等命令都会在这个目录下执行 | WORKDIR /app |
COPY | 复制文件,将本地文件(如JAR包)复制到镜像中 | COPY target/my-app.jar app.jar |
RUN | 执行命令,在构建镜像时运行,常用于安装软件包 | RUN apt-get update && apt-get install -y curl |
ENV | 设置环境变量,设置容器运行时的环境变量 | ENV JAVA_OPTS="-Xms512m -Xmx1024m" |
EXPOSE | 声明端口,告诉Docker容器内应用打算监听的端口,仅作文档说明 | EXPOSE 8080 |
CMD | 容器启动命令,定义容器启动时执行的命令,可以被docker run时的命令覆盖 | CMD ["java", "-jar", "app.jar"] |
ENTRYPOINT | 容器入口点,也是定义启动命令,但更“硬”,通常与CMD配合使用 | ENTRYPOINT ["java", "-jar"]CMD ["app.jar"] |
实操演示
# 使用轻量级 JRE 镜像(基于 Alpine,体积更小)
FROM eclipse-temurin:21-jre-alpine
LABEL maintainer="your-email@example.com"
WORKDIR /app
# 复制 JAR 包(使用通配符,适应版本变化)
COPY target/*.jar app.jar
# 暴露应用端口
EXPOSE 6086
# 设置 JVM 参数(可通过环境变量覆盖)
ENV JAVA_OPTS="-Xms256m -Xmx512m"
# 健康检查(需应用暴露 /actuator/health 端点)
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:6086/actuator/health || exit 1
# 启动命令(支持传入 JAVA_OPTS)
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar.jar"]
