Docker 入门:理解镜像与容器的第一课

举报
yd_294192959 发表于 2026/10/30 08:04:44 2026/10/30
【摘要】 第一次接触 Docker 的人,常常被两个词绕晕:镜像和容器。它们到底是什么关系?这篇文章用最直白的方式把这层关系讲清楚,并带你动手跑起第一个容器。一、Docker 到底解决了什么问题想象你要把一个应用交给朋友运行。传统做法是附上一份长长的环境说明:装什么版本的操作系统、配哪些依赖、改哪些配置文件,稍有出入就跑不起来。Docker 的思路是:把应用和它依赖的全部环境打包成一个标准化的“箱子”...

第一次接触 Docker 的人,常常被两个词绕晕:镜像和容器。它们到底是什么关系?这篇文章用最直白的方式把这层关系讲清楚,并带你动手跑起第一个容器。

一、Docker 到底解决了什么问题

想象你要把一个应用交给朋友运行。传统做法是附上一份长长的环境说明:装什么版本的操作系统、配哪些依赖、改哪些配置文件,稍有出入就跑不起来。Docker 的思路是:把应用和它依赖的全部环境打包成一个标准化的“箱子”,在任何装了 Docker 的机器上,这个箱子打开就能跑。这个“箱子”就是容器,而打包箱子的图纸,叫镜像。

二、镜像:容器的蓝图

镜像是一个只读的模板,里面包含了运行某个应用所需的一切:操作系统层、运行库、应用代码、配置文件。你可以把它理解成手机的系统安装包——安装包本身不能打电话,刷进手机才能用。

获取镜像很简单,公共仓库里有大量官方镜像:

docker pull nginx:latest

拉取之后用 docker images 就能看到本地有哪些镜像。镜像采用分层存储,每一层记录一次变更,这种设计让镜像的下载和复用非常高效:两个基于同一基础镜像的应用,只需要多存差异部分。

三、容器:运行中的实例

容器是镜像的运行实例。镜像是静态的,容器是动态的:

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

这条命令做了三件事:以后台方式启动(-d),把宿主机的 8080 端口映射到容器的 80 端口(-p),并给容器取名 my-nginx。随后打开浏览器访问 http://localhost:8080,就能看到 Nginx 的欢迎页——你已经跑起了第一个容器。

docker ps 可以查看正在运行的容器,docker exec -it my-nginx bash 可以进入容器内部一探究竟,输入 exit 退出。停止容器用 docker stop,删除用 docker rm。

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

第一,容器里的数据默认随容器删除而消失。重要的数据一定要用卷(-v)挂载到宿主机目录,否则容器一删,数据就没了。

第二,一个容器只做一件事。不要把数据库、应用、缓存全塞进一个容器,用多个容器协作才是正确姿势,docker compose 就是为此而生的工具。

第三,latest 标签不等于稳定版。生产环境尽量使用明确的版本号,避免某天拉取到不兼容的新版本导致服务异常。

五、常用命令速查

docker pull 拉取镜像;docker images 查看本地镜像;docker run 创建并启动容器;docker ps 查看运行中的容器;docker stop 与 docker start 停止和启动容器;docker logs 查看容器日志,排错时最常用;docker exec 进入运行中的容器;docker rm 与 docker rmi 删除容器与镜像。

结语

镜像是蓝图,容器是按蓝图盖起来的房子。理解了这一层关系,Docker 的大门就算推开了一半。接下来不妨试试自己写一个 Dockerfile,把你写的小项目打包成镜像——那是 Docker 真正好玩的地方。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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