Dockerfile介绍及镜像制作

目录

一、基础概念

[二、Dockerfile 核心常用指令](#二、Dockerfile 核心常用指令)

三、常见应用

[(一)基于 Alpine 制作自定义镜像](#(一)基于 Alpine 制作自定义镜像)

[步骤 1:创建文件](#步骤 1:创建文件)

[步骤 2:构建镜像](#步骤 2:构建镜像)

[步骤 3:查看镜像 & 运行容器](#步骤 3:查看镜像 & 运行容器)

[(二)部署静态 HTML 网站(Nginx)](#(二)部署静态 HTML 网站(Nginx))

[步骤 1:目录结构](#步骤 1:目录结构)

[步骤 2:编写文件](#步骤 2:编写文件)

[步骤 3:构建 & 启动](#步骤 3:构建 & 启动)

[步骤 4:访问测试](#步骤 4:访问测试)

[(三)运行 Java 程序(JAR 包)](#(三)运行 Java 程序(JAR 包))

[步骤 1:目录结构](#步骤 1:目录结构)

[步骤 2:Dockerfile](#步骤 2:Dockerfile)

[步骤 3:构建 & 运行](#步骤 3:构建 & 运行)

四、参考网站


一、基础概念

Dockerfile 是一个纯文本格式的配置文件,里面由一条条指令组成,用来自动化定义镜像的构建规则。简单理解:它就是制作 Docker 镜像的脚本说明书,Docker 读取文件内指令,自动完成「选基础系统、装软件、拷文件、配环境、设置启动命令」等一系列操作,最终生成标准镜像。

二、Dockerfile 核心常用指令

| 命令 | 作用 |
| FROM | 基础镜像(必须第一条) |
| WORKDIR | 容器内工作目录 |
| COPY/ADD | 复制本地文件到容器 |
| RUN | 构建时执行命令(安装软件、编译等) |
| ENV | 设置环境变量 |
| EXPOSE | 声明容器监听端口(仅注释,不实际开放) |
| CMD | 容器启动默认命令(只生效最后一条) |

ENTRYPOINT 容器入口脚本 /

三、常见应用

(一)基于 Alpine 制作自定义镜像

Alpine 是轻量 Linux 镜像,体积极小,适合入门。

步骤 1:创建文件

新建文件夹 demo1,进入目录,创建 Dockerfile:

bash 复制代码
# 1. 指定基础镜像
FROM alpine:latest

# 2. 设置容器内工作目录
WORKDIR /app

# 3. 构建时执行命令:安装 curl
RUN apk add --no-cache curl

# 4. 声明端口(可选)
EXPOSE 80

# 5. 容器启动后执行的命令
CMD ["echo", "Hello Dockerfile! 镜像启动成功"]

步骤 2:构建镜像

在 Dockerfile 所在目录执行构建命令:

bash 复制代码
# 格式:docker build -t 镜像名:标签 .
docker build -t my-alpine:v1 .
  • -t:给镜像打名称 + 版本标签
  • 末尾 . 代表当前目录为构建上下文

步骤 3:查看镜像 & 运行容器

bash 复制代码
# 查看本地镜像
docker images

# 运行容器
docker run --rm my-alpine:v1
  • --rm:容器停止后自动删除,避免残留

(二)部署静态 HTML 网站(Nginx)

最常用业务场景:打包静态页面 + Nginx 做成自定义镜像

步骤 1:目录结构

bash 复制代码
demo2/
├── Dockerfile
└── index.html   # 本地静态页面

步骤 2:编写文件

index.html 内容:

bash 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Docker Nginx 静态站</title>
</head>
<body>
    <h1>基于 Dockerfile 构建 Nginx 镜像</h1>
</body>
</html>

Dockerfile 内容:

bash 复制代码
# 基础镜像:官方 Nginx
FROM nginx:alpine

# 复制本地 html 文件到 Nginx 网页根目录
COPY index.html /usr/share/nginx/html/

# 声明 80 端口
EXPOSE 80

# Nginx 官方镜像已内置 CMD,此处可省略

步骤 3:构建 & 启动

bash 复制代码
# 构建镜像
docker build -t my-nginx:v1 .

# 启动容器,端口映射:主机8080 -> 容器80
docker run -d -p 8080:80 --name nginx-demo my-nginx:v1
  • -d:后台运行(守护进程)
  • -p 主机端口:容器端口:端口映射

步骤 4:访问测试

浏览器打开:http://服务器IP:8080,即可看到页面

(三)运行 Java 程序(JAR 包)

后端常用:JDK + SpringBoot Jar 包打包镜像

步骤 1:目录结构

bash 复制代码
demo3/
├── Dockerfile
└── app.jar   # 你的 Java 可执行 jar 包

步骤 2:Dockerfile

bash 复制代码
# 基于 OpenJDK 基础镜像
FROM openjdk:11-jre-slim

# 工作目录
WORKDIR /app

# 复制 jar 包到容器内
COPY app.jar app.jar

# 声明端口(SpringBoot 默认8080)
EXPOSE 8080

# 启动 Java 程序
CMD ["java", "-jar", "app.jar"]

步骤 3:构建 & 运行

bash 复制代码
# 构建
docker build -t my-java-app:v1 .

# 运行
docker run -d -p 8080:8080 --name java-demo my-java-app:v1

四、参考网站

https://gitee.com/kennylee/docker

https://gitee.com/zhengqingya/docker-compose

https://gitee.com/Bruce-Tools/tools-docker.git

相关推荐
人活一口气8 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP9 小时前
Vibe Coding -- 完整项目案例实操
java
荣码9 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing9 小时前
Google第三方授权登录
java·后端·程序员
明月光8189 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑19 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯19 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路1 天前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
像我这样帅的人丶你还1 天前
Java 后端详解(五):Redis 缓存
java·后端·全栈
plainGeekDev1 天前
GreenDAO → Room
android·java·kotlin