首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何构建 Docker 镜像:超详细新手指南

如何构建 Docker 镜像:超详细新手指南

作者头像
用户5741377
发布2026-06-22 21:36:29
发布2026-06-22 21:36:29
1930
举报

在这篇文章中,你将学习如何从零开始构建一个 Docker 镜像,并使用 Dockerfile 将你的应用部署并运行在 Docker 容器中。

众所周知,Docker 是一个用于打包、部署和运行应用的轻量级容器工具。如果你想先了解 Docker 基础,可以参考相关入门文章。

如果你还没有安装 Docker,可参考官方安装指南。

Dockerfile 解析

构建 Docker 镜像最核心的组件就是 Dockerfile

Dockerfile 是一个包含指令(INSTRUCTION)与参数(ARGUMENT)的简单文本文件。Docker 会根据 Dockerfile 中的内容自动构建镜像。

在 Dockerfile 中:

  • 左边是指令 INSTRUCTION
  • 右边是参数 ARGUMENT

文件名是:Dockerfile或者dockerfile(无扩展名)

常见 Dockerfile 指令与解释

指令

含义

FROM

指定基础镜像(来自 Docker Hub、GCR、Quay、ECR 等)

RUN

在镜像构建期间执行命令

ENV

设置环境变量(构建期 + 容器运行时均可用)

COPY

复制本地文件到镜像

EXPOSE

声明容器需要暴露的端口

ADD

COPY 的增强版(支持 URL、自动解压 tar),但官方推荐优先使用 COPY

WORKDIR

设置工作目录

VOLUME

创建 / 挂载数据卷

USER

指定容器运行使用的用户

LABEL

为镜像添加元数据

ARG

设置构建期变量(不会出现在运行时)

SHELL

指定后续 RUN、CMD 等使用的 shell

CMD

容器启动时执行的命令(可被覆盖)

ENTRYPOINT

容器默认入口点(可通过 CLI 覆盖)

如何使用 Dockerfile 构建镜像(实战示例)

我们将用一个真实示例来学习整个流程: 从零构建一个 Nginx 镜像,并替换首页 index.html。

镜像构建流程示意图

Docker image build workflow
Docker image build workflow

步骤 1:创建工程目录

代码语言:javascript
复制
mkdir nginx-image && cd nginx-image
mkdir files
touch .dockerignore
步骤 2:准备 HTML 与 Nginx 配置
进入 files 目录:
cd files
创建 index.html
vi index.html
内容如下:
<html>
  <head>
    <title>Dockerfile</title>
  </head>
  <body>
    <div class="container">
      <h1>My App</h1>
      <h2>This is my first app</h2>
      <p>Hello everyone, This is running via Docker container</p>
    </div>
  </body>
</html>
创建 Nginx 配置文件 default
vi default
内容如下:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /usr/share/nginx/html;
    index index.html index.htm;
    server_name _;
    location / {
        try_files $uri $uri/ =404;
    }
}
步骤 3:选择基础镜像
使用 Ubuntu 18.04:
FROM ubuntu:18.04
官方建议:
  • 生产环境尽量使用最小化镜像(如 alpine 或 distroless)
  • 优先使用官方认证镜像以降低安全风险

步骤 4:编写 Dockerfile 在 nginx-image 目录下创建 Dockerfile: vim Dockerfile 内容如下: FROM ubuntu:18.04 LABEL maintainer="contact@devopscube.com" RUN apt-get -y update && apt-get -y install nginx COPY files/default /etc/nginx/sites-available/default COPY files/index.html /usr/share/nginx/html/index.html EXPOSE 80 CMD ["/usr/sbin/nginx", "-g", "daemon off;"] 步骤 5:构建 Docker 镜像 最终目录结构如下: nginx-image ├── Dockerfile └── files ├── default └── index.html 运行构建命令: docker build -t nginx:1.0 . 步骤 6:运行并测试镜像 docker run -d -p 9090:80 --name webserver nginx:1.0 访问: http://<host-ip>:9090

valaidating nginx docker image by running the docker container.
valaidating nginx docker image by running the docker container.

推送镜像到 Docker Hub 登录: docker login

docker hub login
docker hub login

打标签: docker tag nginx:1.0 <username>/nginx:1.0

tagging docker image with dockerhub username
tagging docker image with dockerhub username

推送: docker push <username>/nginx:1.0

docker image in docker hub
docker image in docker hub
Docker image build to registry workflow
Docker image build to registry workflow

Dockerfile heredoc 用法 示例: RUN <<EOF apt-get update apt-get upgrade -y apt-get install -y nginx EOF 可用于写入 Python 文件: RUN python3 <<EOF with open("/hello", "w") as f: print("Hello", file=f) print("World", file=f) EOF 可用于直接生成 HTML: COPY <<EOF /usr/share/nginx/html/index.html <html>...</html> EOF Dockerfile 最佳实践

  • 使用 .dockerignore
  • 尽量减少镜像层数量
  • 运行非 root 用户
  • 优先使用小镜像(alpine / distroless)
  • 避免泄露密码与敏感信息
  • 使用固定版本 tag 而非 latest
  • 使用多阶段构建(multi-stage build)
  • 避免不必要的 RUN 指令
  • 使用 hadolint 进行 Dockerfile 检查

常见构建问题

  • Dockerfile 语法错误 → build 失败
  • 8080 端口被占用 → 修改端口或关闭占用程序
  • 无法访问互联网 → DNS 或代理问题
  • 服务名称冲突 → 指定 container --name

官方可信镜像仓库 Registry内容Docker Hub官方基础镜像Google CloudDistroless 基础镜像AWS ECR PublicAmazon 公共镜像RedHat Quay企业级镜像仓库Docker 镜像 vs 容器 镜像容器只读层组成镜像 + 可写层如 VM 镜像如 VM 实例可有多个标签镜像必须存在才能运行 如何从 Git 仓库构建镜像? docker build https://github.com/user/repo.git 什么是 Docker build context? 就是构建镜像时提交给 Docker Engine 的整个目录内容。 你接下来可以练习 你可以尝试为以下应用制作 Docker 镜像:

  • Python
  • Node.js
  • Django
  • FastAPI
  • Java 应用

总结: 本文详细介绍了如何构建 Docker 镜像、使用 Dockerfile、推送镜像、最佳实践等内容。对于 DevOps 工程师而言,熟悉镜像构建流程,是学习容器化与 Kubernetes 的基础。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps和k8s全栈技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dockerfile 解析
  • 如何使用 Dockerfile 构建镜像(实战示例)
    • 镜像构建流程示意图
  • 步骤 1:创建工程目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档