Docker入门:用一个最小Web服务讲清镜像、容器与数据卷

举报
yd_268428615 发表于 2026/10/26 06:06:55 2026/10/26
【摘要】 很多新手第一次学 Docker,都会被一堆名词绕晕:镜像、容器、仓库、数据卷。其实只要跑通一个最小的 Web 服务,这几个概念就一次对上了。本文不讲底层原理,只讲一条能动手走通的路线。一、三个概念先一句话讲清镜像是一份只读的模板,里面装着运行程序需要的文件和配置;容器是镜像跑起来的实例,可以启动、停止和删除;数据卷是容器之外的一块存储,用来把数据留下来。打个比方:镜像是菜谱,容器是按菜谱做出...

很多新手第一次学 Docker,都会被一堆名词绕晕:镜像、容器、仓库、数据卷。其实只要跑通一个最小的 Web 服务,这几个概念就一次对上了。本文不讲底层原理,只讲一条能动手走通的路线。

一、三个概念先一句话讲清

镜像是一份只读的模板,里面装着运行程序需要的文件和配置;容器是镜像跑起来的实例,可以启动、停止和删除;数据卷是容器之外的一块存储,用来把数据留下来。打个比方:镜像是菜谱,容器是按菜谱做出来的一盘菜,数据卷是另外准备的饭盒,菜吃完了,饭盒里剩的东西还在。

二、先跑一个现成的容器

装好 Docker 后,先跑一个最简单的 Nginx:

docker run -d --name my-web -p 8080:80 nginx

这条命令的意思是:以后台方式运行一个名叫 my-web 的容器,把容器里的 80 端口映射到本机的 8080 端口。打开浏览器访问本机 8080 端口,能看到欢迎页,就说明第一步通了。这时用 docker ps 能看到正在运行的容器,用 docker stop my-web 可以停掉它,再用 docker start my-web 又能把它拉起来。

三、自己写一个最小镜像

只用现成镜像还不够,自己的项目也要能打包。准备一个只有一句话的 index.html,再写一个只有三行的 Dockerfile:

FROM nginx
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80

然后在同一目录执行构建和运行:
docker build -t my-site:v1 .
docker run -d --name my-site -p 8081:80 my-site:v1

访问本机 8081 端口,看到自己的页面,就完成了从代码到镜像、再到容器的完整一圈。改了页面内容,重新构建一个 v2 版本再跑起来,对比两个版本,就能直观理解镜像版本的作用。

四、数据卷解决什么问题

容器删了,容器里写的数据默认也会跟着消失。做实验时可以这样验证:先用一个带数据卷的容器写点东西,删掉容器,再用同一个数据卷起一个新容器,数据还在。常用的做法是把本机目录挂载进容器,或者创建一个具名数据卷。记住一条原则就行:代码和配置可以随时重建,真正重要的数据不要只放在容器内部。

五、新手最容易踩的三个坑

第一,端口映射写反。-p 后面是本机端口在前、容器端口在后,写成 80:8080 就访问不通。第二,容器停了就以为数据还在,删容器之前先确认有没有挂数据卷。第三,把镜像当成虚拟机,往里面装一堆东西又不清理,导致镜像越来越大。保持镜像精简、一个容器只做一件事,是很好的起点习惯。

结尾:从今天起,别再只看概念。先跑通 Nginx,再打包自己的一个小页面,最后试一次数据卷。这一圈走下来,镜像、容器和数据卷就不再是抽象名词,而是你亲手用过的工具。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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