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

相关推荐
c++之路1 小时前
CMake 系列教程(三):变量、条件与控制流
java·windows·spring
AI科技星1 小时前
《数术工坊:无穷套娃录》 一部用数学套娃写成的“天书小说”
c语言·开发语言·网络·量子计算·agi
一条泥憨鱼2 小时前
苍穹外卖【day5|Redis与店铺营业状态设置】
java·后端·mybatis·苍穹外卖
要开心吖ZSH2 小时前
AI医疗分诊与健康咨询助手agent开发——(2)让AI输出可控:结构化分诊与安全规则
java·ai·agent·健康医疗·spring ai
Anastasiozzzz2 小时前
构建健壮软件系统的基石:深入解析面向对象设计七大原则
开发语言·javascript·设计模式·ecmascript
Dxy12393102162 小时前
Python 请求:为什么 Session 比直接请求快 10 倍?
开发语言·python
dongf20192 小时前
R 语言 逻辑斯蒂回归
开发语言·数据分析·回归·r语言
Irissgwe2 小时前
C++ STL unordered系列关联式容器详解
开发语言·c++·stl·关联式容器
m0_547486662 小时前
华南农业大学《C语言程序设计》期末试卷及答案2018-2025年PDF
c语言·开发语言·pdf·c语言程序设计