Docker 入门:从一句话理解容器,到跑起你的第一个应用

举报
yd_291421803 发表于 2026/11/09 19:17:58 2026/11/09
【摘要】 一句话讲清容器与虚拟机的区别,跟着 hello-world 和 Nginx 跑起第一个容器,再亲手写一个 Dockerfile,顺带避开新手最常踩的四个坑。

很多新手第一次听到 Docker,都会问同一个问题:容器和虚拟机到底有什么不一样?一句话回答:虚拟机是“搬一台电脑”,容器是“打包一个应用”。虚拟机要模拟整套硬件、装一个完整的操作系统,启动慢、占资源多;容器只打包应用本身和它依赖的运行库,与宿主机共享操作系统内核,所以启动常常不到一秒,体积也只有几十到几百 MB。

容器到底解决了什么问题

最经典的场景是“在我电脑上明明能跑”。开发环境是 Python 3.11、生产环境却是 3.9,依赖版本一差,程序就行为异常。Docker 把“应用 + 运行环境”打成一个不可变的镜像(Image),在哪里运行都是一模一样的。镜像是只读的模板,基于镜像启动的实例叫容器(Container),容器里产生的数据如果不做特殊处理,会随容器删除而消失——这是新手最容易踩的第一个坑。

四个核心概念

  • 镜像(Image):分层构建的只读文件,每一层对应 Dockerfile 里的一条指令,相同的层可以在多个镜像间复用。
  • 容器(Container):镜像的运行实例,彼此隔离,共享内核。
  • Dockerfile:描述镜像怎么构建的文本文件,是镜像的“菜谱”。
  • 仓库(Registry):存放镜像的地方,Docker Hub 是最常用的公共仓库,云厂商也提供私有镜像托管服务。

动手:跑起你的第一个容器

先确认本地装好了 Docker,执行:

docker version
docker run hello-world

看到 “Hello from Docker!” 就说明环境没问题。接下来跑一个真正的 Web 服务:

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

这条命令做了三件事:以后台方式(-d)启动容器,把宿主机的 8080 端口映射到容器的 80 端口(-p),并给容器起个名字。打开浏览器访问 localhost:8080,就能看到 Nginx 的欢迎页。停止和删除也很简单:

docker stop my-nginx
docker rm my-nginx

写你自己的镜像

新建一个目录,放一个简单的 index.html,再写一个 Dockerfile:

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html

执行 docker build -t my-site:1.0 . 构建,再用 docker run -d -p 8080:80 my-site:1.0 启动,就得到了属于自己的镜像。这里的 alpine 是个非常小的 Linux 发行版镜像,基于它的镜像体积通常只有几十 MB。

新手常踩的四个坑

  1. 容器删了,数据就没了:需要持久化的数据要用卷(volume)挂载,例如 docker run -v mydata:/data。
  2. 端口映射写反:-p 宿主机端口:容器端口,顺序别弄错。
  3. 镜像越做越大:构建时尽量用多阶段构建,把编译工具留在构建阶段,不带进最终镜像。
  4. 容器跑着就以为万事大吉:崩溃重启策略要显式设置,例如 --restart unless-stopped。

小结

Docker 的学习曲线并不陡:先理解“镜像是模板、容器是实例”这一组关系,再用 hello-world 和 Nginx 各跑一次,最后亲手写一个 Dockerfile,基本概念就打通了。下一步可以去了解 Docker Compose——用一个 YAML 文件把多个容器编排起来,比如“Web 服务 + 数据库”一次启动。容器化的真正价值不在技术本身,而在于让“开发、测试、生产用同一份环境”从口号变成默认动作。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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