Docker 入门实践:从镜像、容器到 Dockerfile 的完整流程

举报
yd_295675147 发表于 2026/10/27 18:04:24 2026/10/27
【摘要】 从镜像、容器到 Dockerfile,一步步掌握 Docker 的核心概念与日常实践方法。

一、为什么要用 Docker


在传统部署中,"在我机器上能跑"是常见的痛点:依赖版本不一致、环境差异、上线后行为不同。Docker 通过镜像把应用及其运行环境一起打包,实现"一次构建,处处运行",大幅降低环境不一致带来的排障成本。

二、三个核心概念

• 镜像(Image):只读模板,包含文件系统与应用依赖。

• 容器(Container):镜像的运行实例,拥有独立的进程与文件系统视图。

• 仓库(Registry):镜像的存储与分发中心,如 Docker Hub、华为云 SWR。


三者关系可以理解为:镜像相当于"类",容器相当于"对象",仓库则是镜像的托管平台。

三、动手:运行第一个容器


docker run --rm -p 8080:80 nginx:alpine


参数说明:

• `--rm`:容器退出后自动删除,避免残留。

• `-p 8080:80`:把宿主机 8080 端口映射到容器 80 端口。

• `nginx:alpine`:使用轻量的 alpine 版本镜像。


浏览器访问 http://localhost:8080 即可看到 Nginx 默认页。

四、用 Dockerfile 构建自己的镜像


下面是一个 Python Flask 应用的最小 Dockerfile:


FROM python:3.12-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]


关键点:


1. 选择 `slim` 基础镜像,减少体积与攻击面。

2. 先 COPY 依赖清单再安装,利用层缓存加速重复构建。

3. 使用 `--no-cache-dir` 避免缓存进入镜像层。


构建并运行:


docker build -t my-flask:v1 .

docker run --rm -p 5000:5000 my-flask:v1


五、常见坑与建议

• 端口未映射:容器内服务应监听 0.0.0.0 而不是 127.0.0.1,否则外部无法访问。

• 镜像过大:优先使用 alpine/slim 基础镜像,合并 RUN 指令,清理临时文件。

• 数据持久化:数据库等有状态服务应使用 volume,不要把数据写进容器层。

• 日志:容器日志输出到 stdout/stderr,交给日志驱动统一收集。

六、小结


Docker 的价值不只是"打包",更是把环境、依赖与运行方式固化为可版本化的产物。掌握镜像、容器、Dockerfile 三件套,就能覆盖大多数日常开发与部署场景。下一步可以了解 Docker Compose 编排多容器应用,以及 Kubernetes 在生产环境中的调度能力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。