Docker入门:从一个小项目理解镜像、容器与数据卷

举报
胡斌5006 发表于 2026/11/09 17:22:25 2026/11/09
【摘要】 刚接触 Docker 时,最容易被名词绕晕:镜像、容器、数据卷、Dockerfile,它们到底是什么关系?我自己的办法是先做一个最小的项目,再回头看概念,顺序就顺了。 一、一个最小的例子假设你要跑一个静态页面,只需要两个文件:index.html 和 Dockerfile,其他什么都不用装。Dockerfile 只有三行,分别写成:FROM nginx:alpine、COPY index.h...

刚接触 Docker 时,最容易被名词绕晕:镜像、容器、数据卷、Dockerfile,它们到底是什么关系?我自己的办法是先做一个最小的项目,再回头看概念,顺序就顺了。

一、一个最小的例子

假设你要跑一个静态页面,只需要两个文件:index.html 和 Dockerfile,其他什么都不用装。

Dockerfile 只有三行,分别写成:FROM nginx:alpine、COPY index.html /usr/share/nginx/html/index.html、EXPOSE 80。

然后执行构建命令 docker build -t my-page:1.0 .,再执行启动命令 docker run -d -p 8080:80 --name my-page my-page:1.0。

在浏览器打开本地的 8080 端口,页面出现了。这一步里,镜像就是“已经装好环境、打好包的模板”,容器是“用这个模板跑起来的实例”,两者是一对多的关系:同一个镜像可以启动很多个容器。

二、改代码为什么要重新构建?

第一次改 index.html 后,刷新页面没有变化,这是新手最常遇到的一幕。原因是容器里的文件来自构建那一刻的复制,宿主机上的改动不会自动同步进去。解决办法有两种思路:开发时把代码目录挂载进容器,部署时重新构建镜像并替换容器。先理解“镜像不可变、容器可替换”这个原则,很多操作就不再神秘。

三、数据卷用来装什么?

如果应用要写数据,比如日志或上传的文件,直接写进容器层并不稳妥:容器删掉,数据就跟着没了。数据卷就是把数据放到容器之外,由 Docker 单独管理的一块存储,启动时这样挂载:docker run -d -v mydata:/data --name app my-page:1.0。

这样即使删掉容器再重建,只要卷还在,数据就还在。我的判断标准很简单:代码和环境放镜像里,需要长期保存的东西放卷里。

四、新手常踩的三个坑

第一,端口写反了。-p 8080:80 前面是宿主机端口,后面是容器端口,写反就打不开页面。第二,容器名重复,启动前先执行 docker ps -a 看一眼,旧的要先删掉。第三,镜像越做越大,尽量用 alpine 这类小基础镜像,不要把调试工具、临时文件都塞进最终镜像。

五、一个可复用的检查清单

每次动手前,我会先确认四件事:基础镜像是否够小、端口映射是否正确、数据是否用了卷、镜像有没有打标签。标签不用花哨,1.0、20261109 这种能对应上版本就行。做完这一步,再谈多容器编排、镜像仓库和自动化部署,底子就稳了。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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