Docker 入门:从一个容器理解镜像与隔离

举报
yd_213156404 发表于 2026/11/08 00:04:01 2026/11/08
【摘要】 第一次接触 Docker 时,我脑子里只有一个问题:容器到底是个什么东西?它像虚拟机,又不是虚拟机;它很轻,启动只要一秒;它说“一次构建,到处运行”,听起来像魔法。后来我用一个最普通的 Nginx 容器把它想明白了:容器就是一个被隔离起来的进程,而镜像就是启动这个进程所用的只读模板。 一、容器不是虚拟机虚拟机是在宿主机上再跑一整套操作系统,带着自己的内核,笨重但隔离彻底。容器不一样,它和宿主...

第一次接触 Docker 时,我脑子里只有一个问题:容器到底是个什么东西?它像虚拟机,又不是虚拟机;它很轻,启动只要一秒;它说“一次构建,到处运行”,听起来像魔法。后来我用一个最普通的 Nginx 容器把它想明白了:容器就是一个被隔离起来的进程,而镜像就是启动这个进程所用的只读模板。

一、容器不是虚拟机

虚拟机是在宿主机上再跑一整套操作系统,带着自己的内核,笨重但隔离彻底。容器不一样,它和宿主机共享同一个内核,只是在这个内核之上,用技术手段给进程划出一个独立的小世界。容器里看到的进程、文件、网络,都是它自己的;容器外看它,只是一个普通的进程。

所以容器启动快、占用少,代价是隔离程度不如虚拟机:内核是共用的,容器逃逸的风险要靠额外的安全手段去管。理解这一点,就不会再问“容器能不能完全替代虚拟机”——它们是不同层次的工具。

二、镜像:只读的分层模板

docker run nginx 的时候,Docker 先去找名为 nginx 的镜像。镜像不是一个大文件,而是一层一层叠起来的只读文件系统:最下面是操作系统基础层,上面依次是依赖、配置和应用文件。每一层都有编号,相同的层可以在不同镜像之间复用,所以下载第二个镜像时往往很快。

容器启动时,Docker 在镜像顶层再加一个可写层。容器里新建、修改的文件都写进这一层,镜像本身纹丝不动。删掉容器,可写层跟着消失;再跑一次,得到的又是一个干净的初始状态。这个设计解释了容器的两个特点:启动快,因为不用复制整个系统;可丢弃,因为状态本来就不属于镜像。

三、隔离从哪里来

容器给人的“独立感”主要来自两项 Linux 技术。第一是命名空间(Namespace):进程、网络、挂载点、用户等各自有了独立的视图,容器里的 1 号进程以为自己就是整个系统。第二是控制组(Cgroup):限制一个容器能用多少 CPU 和内存,防止某个容器把整台机器的资源吃光。

名字空间管“看得见什么”,控制组管“能用多少”,两者合起来,才有了容器这个看起来像小机器、实际上只是一个进程的东西。

四、动手:跑起第一个容器

docker run -d --name demo -p 8080:80 nginx
docker ps
docker exec -it demo /bin/bash

第一条命令以后台方式启动容器,把宿主机的 8080 端口映射到容器的 80 端口;第二条查看正在运行的容器;第三条进入容器内部看一看。打开浏览器访问 http://localhost:8080,看到 Nginx 欢迎页,就说明容器已经在工作了。用完之后 docker stop demo 停掉它,docker rm demo 删掉它,机器上不留痕迹。

五、容器里改了东西,去哪了

新手最容易踩的坑,是在容器里改了配置文件,重启容器后发现改动没了——因为可写层跟着旧容器一起被删了。需要长期保存的数据,要用数据卷挂载出来,例如把宿主机目录映射到容器里,或者用具名卷。原则很简单:容器负责跑,无状态;数据负责留,放在卷里。

六、三个常见误区

第一,把容器当虚拟机用,在里面装 systemd、跑多个服务——一个容器只做好一件事,才符合它的设计。第二,镜像里塞进密钥和密码——镜像会被到处分发,秘密要走专门的配置管理。第三,认为容器天然安全——镜像来源、基础镜像的漏洞、容器的权限,都需要持续检查。

结尾

回头看,Docker 并不神秘:镜像是模板,容器是按模板启动的、被隔离的进程;名字空间负责隔离视野,控制组负责限制资源,可写层负责容纳变化。掌握这几个概念,再去学 Dockerfile、镜像仓库和容器编排,就有了落脚点。下一个练习可以自己写一个 Dockerfile,把一段简单的静态页面打成镜像、跑起来——从使用者变成构建者,只差这一步。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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